Введение

OpenSceneGraph — это открытый программный интерфейс прикладного программирования (библиотека или фреймворк) для работы с трехмерной графикой, используемый разработчиками приложений в таких областях, как визуальное моделирование, компьютерные игры, виртуальная реальность, научная визуализация и моделирование. Этот инструментарий написан на стандартном C++ с использованием OpenGL и с 2019 года находится на стадии поддержки и обслуживания.

История

Проект OpenSceneGraph был инициирован Доном Бернсом в 1998 году. Роберт Осфилд присоединился к проекту в 1999 году, работая над портированием готовых компонентов для Microsoft Windows. Проект стал открытым исходным кодом в сентябре 1999 года и был создан официальный веб-сайт проекта. К концу года Осфилд возглавил проект и начал масштабную рефакторизацию существующей кодовой базы, делая акцент на модернизации, использовании современных стандартов C++ и шаблонов проектирования. В апреле 2001 года, принимая во внимание растущее сообщество пользователей и общественный интерес, Роберт Осфилд создал OpenSceneGraph Professional Services, предоставляя коммерческую поддержку, консультации и услуги обучения. Это ознаменовало полную профессионализацию проекта. Первая официальная стабильная версия OpenSceneGraph, версия 1.0, была выпущена в 2005 году. За ней последовала расширенная версия 2.0 в 2007 году, добавившая поддержку многоядерных и многопроцессорных систем, несколько важных NodeKits и использование унифицированной кроссплатформенной системы сборки CMake. Были выпущены книги и руководства пользователя. С тех пор проект быстро рос и становился все более популярным. Под текущей стабильной версией подписаны более 530 разработчиков, а официальный список рассылки насчитывает тысячи имен. В 2019 году проект был переведен в режим поддержки, а основные усилия по разработке были перенаправлены на его проект-преемник VulkanSceneGraph.

История выпуска стабильных версий

ВерсияДата выпуска3.05 февраля 20133.224 июля 20133.420 июля 20153.4.128 августа 20173.67 апреля 20183.6.128 мая 20183.6.229 июня 20183.6.314 сентября 20183.6.426 июля 20193.6.531 января 2020

Архитектура

Архитектура библиотеки OpenSceneGraph может быть разделена на три основных подмножества: основная библиотека OpenSceneGraph, osgViewer и набор NodeKits.

Ядро

Основу библиотеки OpenSceneGraph можно далее разделить на четыре основных модуля.

ОСГ

Ядро OpenSceneGraph предоставляет классы и методы для создания и манипулирования сценовым графом. Оно включает классы, представляющие различные типы узлов, геометрию сцен, абстракцию состояния OpenGL, геометрические преобразования, а также математические классы для 2D- и 3D-векторных и матричных операций. Также реализовано продвинутое управление памятью.

ОткрытьThreads

Проект OpenSceneGraph включает в себя библиотеку потоков OpenThreads, представляющую собой легковесную кроссплатформенную модель потоков. Она предназначена для предоставления минимального и полного объектно-ориентированного (ОО) интерфейса потоков для программистов на C++. Она во многом основана на API Java и стандартах POSIX Threads. Архитектура OpenThreads построена вокруг "заменяемых" моделей потоков, которые определяются во время компиляции в общей объектной библиотеке. Важно отметить, что хотя шаблон проектирования "фабрика" мог бы быть использован для достижения цели создания универсального интерфейса, это потребовало бы от программиста выделять каждый из 4 основных типов (Поток, Мьютекс, Барьер и Условие) в динамической памяти. Из-за накладных расходов, связанных с выделением динамической памяти для базовых конкретных реализаций этих конструкций на некоторых платформах, такое выделение памяти считалось неприемлемым на момент первоначальной разработки этой библиотеки, и поэтому шаблон "фабрика" не был использован. Вместо этого был выбран несколько сложный, но эффективный метод для обеспечения необходимой скрытности данных и реализации. Этот метод использует приватные void-указатели для инкапсуляции приватных данных объекта. Эти void-указатели фактически указывают на конкретные структуры данных, но предоставляют единый интерфейс для DSO. Целью разработки OpenThreads является создание оптимизированных реализаций с использованием многопроцессорных конструкций, оптимизированных для конкретной платформы, таких как методы sproc, используемые в IRIX, и потоки Windows.

ОгУтил

osgUtil содержит функциональность графического бэкенда и утилиты, отвечающие за обход графа сцены, оптимизацию рендеринга и преобразование сцены в поток вызовов API OpenGL. Он также предоставляет средства для базового взаимодействия со сценой, такие как выбор объектов.

ОСГДБ

Эта библиотека предназначена для загрузки файлов 3D-моделей. Она поддерживает множество манипуляторов 2D/3D форматов данных. Поддерживается более 50 различных форматов, наиболее распространенными из которых являются 3D-форматы данных, такие как COLLADA (.dae), LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) и многие другие. OpenSceneGraph также предоставляет собственный нативный формат osg ASCII. Для Blender, Maya и 3D Studio MAX доступны экспортеры в формат osg. Поддерживаемые форматы изображений включают rgb, gif, jpg, png, tiff, pic, bmp, dds, tga и quicktime. Этот модуль также обеспечивает абстракцию устройств ввода-вывода. Другие плагины для загрузки файловых форматов регистрируются в osgDB.

ОСГГА

Это библиотека абстракции графического интерфейса, требуемая для различных платформ.

ОСГВизер

Библиотека osgViewer предоставляет быстрый и удобный способ визуализации графической сцены. Она также является платформенно-независимой абстракцией для различных интерфейсов оконных систем.

Производитель

OSG также поставляется с osgProducer – это кроссплатформенный просмотрщик, поддерживающий несколько графических контекстов и многопоточность.

NodeKits

Распространение проекта также содержит множество так называемых NodeKits. Это решения общих проблем и часто используемые продвинутые компоненты 3D-приложений и графические алгоритмы. Среди наиболее значимых:

osgAnimation — использование, анимация и морфинг скелетных моделей. osgFX — специальные эффекты и постпроцессинг изображений. osgManipulator — интерактивное манипулирование 3D-сценой. osgParticle — расширенное использование систем частиц. osgQt — интеграция с инструментарием Qt и включение элементов QtGUI в приложения OSG. osgShadow — фреймворк для техник рендеринга теней. osgTerrain — расширенный рендеринг местности. osgText — качественные шрифты с сглаживанием, поддержка шрифтов TrueType и FreeType. osgVolume — рендеринг объемов и манипулирование объемными данными. osgWidget — простое создание графического интерфейса пользователя.