В OpenSceneGraph




НазваниеВ OpenSceneGraph
страница4/4
Дата публикации30.03.2013
Размер0.53 Mb.
ТипДокументы
www.vbibl.ru > Информатика > Документы
1   2   3   4
Глава 2, Построение Графа Сцены, раскрывает эту тему более подробно.
Классы Управления Состоянием
OSG предоставляет механизм для сохранения желаемого состояния отображения OpenGL в графе сцены. Во время обхода отсечения, геометрии с идентичным состоянием группируются вместе для минимизации изменений состояния. Во время обхода отрисовки, код управления состоянием отслеживает текущее состояние для исключения ненужных изменений.
В отличие от других графов сцены, OSG позволяет состоянию быть ассоциированным с любым узлом графа сцены, и во время обхода состояние наследуется иерархически.


  • StateSet—OSG хранит набор значений состояния (называемых режимы и атрибуты) в классе StateSet. Любой osg::Node в графе сцены может иметь StateSet, ассоциированный с ним.




  • Режимы—Аналогично вызовам OpenGL glEnable() и glDisable(), режимы позволяют вам включать и выключать возможности фиксированного конвейера отображения OpenGL, такие как освещение, смешивание и туман. Используйте метод osg::StateSet::setMode() для сохранения режима в StateSet.




  • Атрибуты—Атрибуты хранят параметры состояния, такие как функция смешивания, свойства материала, цвет тумана. Используйте метод osg::StateSet::setAttribute() для сохранения атрибута в StateSet.




  • Текстурные атрибуты и режимы—Эти атрибуты и режимы применяются к заданному текстурному модулю при мультитекстурировании OpenGL. В отличие от OpenGL, в OSG нет текстурного модуля по умолчанию; при настройке текстурных атрибутов и режимов ваше приложение должно явно указывать текстурный модуль. Для задания этих значений состояния и определения какому текстурному модулю они относятся, используйте в StateSet методы setTextureMode() и setTextureAttribute().




  • Флаги наследования—OSG предоставляет флаги для контроля над тем как состояние наследуется во время обхода графа сцены. По умолчанию значение состояния дочернего узла переопределяет то же значение состояния узла предка. Тем не менее, вы можете заставить, чтобы состояние предка переопределяло состояние потомка, и вы можете задать чтобы состояние потомка было защищено от переопределения предком.


Такая система состояния оправдала себя и оказалась очень гибкой. Все новые возможности, добавляемые в спецификацию OpenGL, на протяжении существования OSG, включая добавление в OpenGL Языка Шейдеров [Rost06], легко подходят в систему состояния OSG. В Разделе 2.4 Состояние Отображения, тема состояния раскрывается более подробно.
Утилиты и Другие Классы
Наконец, библиотека osg содержит несколько полезных классов и утилит. Некоторые из них относятся к механизму подсчета ссылок памяти OSG, позволяющего избежать утечек памяти путем ее освобождения при достижении счетчика ссылок нуля. В Главе 2, Построение Графа Сцены, память с подсчетом ссылок обсуждается более подробно.


  • Referenced—Класс Referenced является базовым классом всех узлов графа сцены и многих других объектов в OSG. Он содержит подсчет ссылок для отслеживания использования памяти. Если объект унаследован от Referenced и его счетчик ссылок достиг нуля, вызывается его деструктор и память, выделенная этому объекту, освобождается.




  • ref_ptr<>—В классе шаблоне ref_ptr<> в качестве аргумента шаблона определяется умный указатель. Аргумент шаблона должен быть унаследован от Referenced или поддерживать идентичный интерфейс подсчета ссылок. Когда адрес объекта назначается в ref_ptr<>, счетчик ссылок объекта автоматически увеличивается. Схожим образом, очистка или удаление ref_ptr<> уменьшает счетчик ссылок объекта.




  • ^ Object—Чисто виртуальный класс Object является базовым классом для всех объектов в OSG которым необходима поддержка ввода/вывода, клонирования и подсчет ссылок. Все классы узлов и несколько других объектов в OSG наследуются от Object.




  • Notify—Библиотека osg поддерживает набор функций для контроля за выводом сообщений отладки, предупреждений и ошибок. Вы можете контролировать количество выводимой информации, определяя одно из значений перечисления NotifySeverity. Большая часть кода модулей OSG выводит уведомляющие сообщения.


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

Библиотека osgUtil
Библиотека osgUtil это большая коллекция утилит для обработки графа сцены и модификации геометрии в ней.
Библиотека osgUtil вероятно более известна своим набором классов поддержки обходов обновления, отсечения и отрисовки. В типичном OSG приложении, этими обходами занимаются высокоуровневые классы поддержки, такие как osgViewer::Viewer, и вам не надо обращаться к ним непосредственно.
^ Библиотека osgUtil
Пространство имен: osgUtil

Заголовочные файлы: /include/osgUtil

Файлы библиотек Windows: osgUtil.dll и osgUtil.lib

Файл библиотеки Linux: libosgUtil.so
Пересечение
Обычно, 3D приложениям необходимо взаимодействовать с пользователем или реагировать на его указания, такое как выбор. Библиотека osgUtil эффективно поддерживает выбор с помощью набора классов, которые тестируют граф сцены на предмет пересечений.


  • Intersector—Это чисто виртуальный класс в котором определен интерфейс проверки на пересечения. Библиотека osgUtil наследует несколько классов от Intersector, по одному на каждый тип геометрии (сегмент линии, плоскость и т.д.). Чтобы выполнить проверку на пересечения, ваше приложение должно создать экземпляр одного из классов унаследованных от Intersector, и передать его экземпляру класса IntersectionVisitor, а потом запросить результаты пересечений.




  • IntersectionVisitor—Класс IntersectionVisitor обходит граф сцены в поисках узлов, которые пересеклись с заданной геометрией. Классы, унаследованные от Intersector, выполняют сами проверки на пересечения.




  • LineSegmentIntersector—Унаследованный от Intersector, класс LineSegmentIntersector проверяет на пересечения между заданным сегментом линии и графом сцены, и предоставляет методы запроса результатов приложением.




  • PolytopeIntersector—Подобно LineSegmentIntersector, класс PolytopeIntersector проверяет пересечения с политопом, состоящим из набора плоскостей. Этот класс особенно полезен для выбора, в котором политоп задается ограничивающим объем в мировом пространстве построенном вокруг точки указателя мыши.




  • PlaneIntersector—Подобно LineSegmentIntersector, класс PlaneIntersector проверяет на предмет пересечения с плоскостью, окруженной набором плоскостей.


Оптимизация
Структура данных графа сцены идеально подходит для оптимизации и простого сбора статистики. Библиотека osgUtil содержит классы, которые обходят граф сцены, модифицируя его, для оптимального отображения и сбирают статистические данные.


  • Optimizer—Как видно из имени, класс Optimizer оптимизирует граф сцены. Его поведение контролируется посредством набора флагов перечисления, которые указывают какой вид оптимизации выполнять. Например, флаг FLATTEN_STATIC_TRANSFORMS трансформирует геометрию не динамических узлов Transform, для более оптимального отображения путем исключения модификации стека матриц вида OpenGL.




  • Statistics и StatsVisitor—Для правильной настройки 3D приложения, разработчик должен иметь как можно больше информации о графе сцены. Класс StatsVisitor возвращает количество и тип узлов в графе сцены, а класс Statistics возвращает количество и тип отображаемой геометрии.


Управление Геометрией
Многие 3D приложения требуют модификации загруженной геометрии для достижения желаемой производительности или визуального результата. Библиотека osgUtil содержит классы, которые предоставляют несколько общих операций над геометрией.


  • Simplifier—Используйте класс Simplifier для уменьшения количества геометрии в объекте Geometry. Он предназначен для автоматического построения меньшего уровня детализации.




  • Tessellator—OpenGL не поддерживает явно вогнутые или сложные многоугольники. Класс Tessellator генерирует osg::PrimitiveSet из набора вершин, описывающих многоугольник.




  • DelaunayTriangulator—Как видно из имени, этот класс реализует алгоритм Триангуляции Делоне, которые генерирует набор треугольников из набора вершин.




  • TriStripVisitor—В общем, связанные примитивы отображаются более эффективно чем отдельные примитивы, потому что имеют общие вершины. Класс TriStripVisitor обходит граф сцены и преобразовывает многоугольники в полоски треугольников и четырехугольников.




  • SmoothingVisitor—Класс SmoothingVisitor генерирует нормали к вершинам, представляющие собой усреднение нормали всех многоугольников, разделяющих эту вершину.




  • Генерация текстурных координат—Библиотека osgUtil содержит поддержку функций для создания карт отражения, карт половинных векторов, и карт зеркальной подсветки. Есть так же класс TangentSpaceGenerator, который создает массив по вершинных векторов предназначенных для отображения рельефа.


Библиотека osgUtil содержит и другие классы, не упомянутые в этом разделе. Обратитесь к заголовочным файлам и исходному коду библиотеки osgUtil чтобы узнать о других классах и возможностях.
^ Библиотека osgDB
Пространство имен: osgDB

Заголовочные файлы: /include/osgDB

Файлы библиотек Windows: osgDB.dll и osgDB.lib

Файл библиотеки Linux: libosgDB.so
Библиотека osgDB
Библиотека osgDB позволяет приложению загружать, использовать и записывать 3D базы данных. Архитектура подгружаемых модулей osgDB предоставляет поддержку широкого круга форматов файлов с 2D картинками и 3D моделями. osgDB поддерживает реестр доступных и уже загруженных подгружаемых модулей OSG.
OSG поддерживает свой собственный формат файлов. .osg это простой ASCII текст, описывающий граф сцены, а .osga является архивом (или группой) .osg файлов. Библиотека osgDB содержит код поддержки всех этих форматов файлов. (OSG так же поддерживает бинарный формат .ive)
Большие 3D базы данных земной поверхности часто состоят из кусочков совмещенных вместе. В этом случае приложению требуется, чтобы часть базы данных подгружалась в фоновом режиме, не оказывая влияния на текущее отображение. osgDB::DatabasePager предоставляет такую функциональность.
Библиотека osgViewer
Библиотека osgViewer определяет несколько классов наблюдения, которые позволяют OSG интегрироваться с широким кругом оконных пакетов разработки, таких как AGL/CGL, Cocoa, FLTK, Fox, MFC, Qt, SDL, Win32, WxWindows, и X11. Классы наблюдения поддерживают как однооконный интерфейс приложения, так и многопоточные приложения, со множеством отображений и поверхностей. Все классы наблюдения поддерживают управление камерой, событиями, а так же osgDB::DatabasePager. Библиотека osgViewer содержит два класса наблюдения, которые может использовать ваше приложение.
^ Библиотека osgViewer
Пространство имен: osgViewer

Заголовочные файлы: /include/osgViewer

Файлы библиотек Windows: osgViewer.dll и osgViewer.lib

Файл библиотеки Linux: libosgViewer.so


  • ^ Viewer—Класс Viewer может управлять множеством синхронизированных камер для отображения одной сцены, занимающей несколько мониторов. Viewer сам создает окно(а) и графический контекст(ы) на основании возможностей лежащей в основе графической системы, поэтому приложение на основанное на Viewer может быть запущено как на одно так и много дисплейной системе.




  • CompositeViewer—Класс CompositeViewer поддерживает множество точек наблюдения для одной сцены, так и множество камер в разных сценах. Вы можете передать результаты одного отображения другому, определив порядок отображения каждого из наблюдений. Используйте CompositeViewer для создания HUDs, динамически создаваемых текстур, и отображение нескольких точек наблюдения в одном окне.


Библиотека osgViewer содержит дополнительные классы для отображения статистики, абстрагирования от оконной системы и управление сценой.
NodeKits
NodeKits расширяет концепцию объектов ^ Node, Drawable, и StateAttribute, и о ней можно думать как о расширении библиотек osg на уровне ядра OSG. NodeKits должны делать нечто большее, чем просто наследоваться от OSG классов. Они так же должны предоставлять dot OSG wrapper (подгружаемый модуль OSG для поддержки чтения из и записи в .osg файл). В результате NodeKit состоит из двух библиотек – сам NodeKit, и библиотека подгружаемого модуля dot OSG wrapper.
OSG v2.0 имеет шесть NodeKits.


  • Библиотека osgFX—Этот NodeKit предоставляет дополнительные узлы графа сцены для отображения спецэффектов, таких как анизотропное освещение, наложение карт рельефа, и эффекты мультфильма.




  • Библиотека osgManipulator—Этот NodeKit содержит несколько классов для управления выбранными объектами графа сцены.




  • Библиотека osgParticle—Этот NodeKit предоставляет эффекты для отображения систем частиц, таких как взрывы, огонь и дым.




  • Библиотека osgSim—Этот NodeKit поддерживает требования специального отображения в системах имитации и баз данных OpenFlight, а именно классы запросов высот, узлы точечных источников света, узлы трансформации DOF.




  • Библиотека osgText—Этот NodeKit является мощным средством для добавления текста в вашу сцену. Он полностью поддерживает все шрифты TrueType.




  • Библиотека osgTerrain—Этот NodeKit предоставляет поддержку для отображения данных карты высот.




  • Библиотека osgShadow—Этот NodeKit предоставляет набор средств для поддержки различных методик отображения теней.


В эту книгу не входит детальное описание богатых возможностей OSG NodeKits. Тем не менее в Разделе ^ 2.6 NodeKits и osgText, объясняются основы использования osgText NodeKit. То, что вы узнаете в Главе 2, должно вдохновить вас на то, чтобы узнать больше о других NodeKits и как их использовать.

Подгружаемые модули OSG
Библиотеки ядра OSG поддерживают ввод/вывод файлов для широкого круга форматов файлов с 2D изображениями и 3D моделями. osgDB::Registry автоматически управляет библиотеками подгружаемых модулей. Ваше приложение просто вызывает функцию чтения или записи файла, и если подходящий модуль доступен, Registry находит его и использует.
Библиотека osg позволяет вашему приложению строить граф сцены узел за узлом. В противоположность этому, подгружаемые модули OSG позволяет вашему приложению загружать весь граф сцены с диска с помощью всего нескольких строк кода или загружать часть графа сцены, а затем ваше приложение может вставить его в полный граф сцены.
OSG v2.0 поддерживает распространенные форматы файлов с 2D изображениями, включая .bmp, .dds, .gif, .jpeg, .pic, .png, .rgb, .tga, и .tiff. OSG поддерживает подгружаемый модуль QuickTime, предназначенный для загрузки видео файлов, и модуль для загрузки файлов шрифтов, с использованием библиотеки FreeType.
Поддержка OSG форматов файлов с 3D моделями обширна и включает следующие распространенные форматы файлов: 3D Studio Max (.3ds), Alias Wavefront (.obj), Carbon Graphics’ Geo (.geo), COLLADA (.dae), ESRI Shapefile (.shp), NewTek LightWave (.lwo и .lws), OpenFlight (.flt), Quake (.md2), и Terrex TerraPage (.txp).
В дополнение к стандартным форматам файлов, перечисленным выше, OSG определяет свой собственный формат. Формат .osg это ASCII текстовое представление графа сцены, которые вы можете редактировать любым текстовым редактором. Формат .ive, с другой стороны, является бинарным и оптимизирован для быстрой загрузки.
В дополнение к файлам с 2D изображениями и 3D моделями, подгружаемые модули OSG поддерживают операции ввода/вывода в архивах, или в наборе связанных файлов. Существуют подгружаемые модули для форматов .tgz и .zip, а так же собственные формат архива OSG .osga.
Подгружаемые модули OSG так же позволяют файлам, размещенным в Интернете, быть загруженными с помощью модуля .net.
Наконец, существует набор подгружаемых модулей известных как псевдозагрузчики, которые предоставляют дополнительную функциональность, выходящую за границы простой загрузки файла.


  • scale, rot, и trans—Эти псевдозагрузчики загружают файл, но дополнительно помещают узел Transform над загружаемым корневым узлом графа сцены, и настраивают Transform в соответствии с заданными значениями масштабирования, вращения, или перемещения.



  • logo—Псевдозагрузчик logo позволяет файлу изображения быть отображенным в HUD-стиле поверх загруженной 3D сцены.


Раздел ^ 2.5 Ввод/Вывод Файлов предоставляет дополнительную информацию о том как использовать подгружаемые модули OSG в вашем приложении.

Способность к Взаимодействию
Вы можете использовать OSG во многих средах программирования, которые позволяют вам линковать C++ библиотеки. Для работы в других средах, OSG предоставляет интерфейс для доступа времени выполнения не зависящий от языка.

Библиотека osgIntrospection позволяет программному обеспечению взаимодействовать с OGS используя, рефлексивно-ориентированное и интроспективно-ориентированное парадигмы программирования. Приложения или любое другое программное обеспечение используют классы и методы osgIntrospection для перебора OSG типов, перечислений и методов, и они могут вызывать эти методы без компиляции и линковки с OSG.
Языки программирования, такие как Smalltalk и Objective-C, содержат встроенные средства для рефлексии и интроспективы, но эти возможности обычно не доступны C++ разработчикам, поскольку C++ не хранит необходимых метаданных. Для того чтобы компенсировать этот недостаток, OSG предоставляет ряд автоматически генерируемых библиотек оберток, создаваемых из исходного кода OSG. Вашему приложению не надо взаимодействовать с обертками OSG непосредственно; они полностью управляются osgIntrospection.
С помощью osgIntrospection и его оберток, многие языки программирования могут работать с OSG, включая Java, TCL, Lua, и Python. Для более полной информации о языках, с которыми может взаимодействовать OSG, посетите OSG Wiki Web сайт [OSGWiki], страница Community, и выберите LanguageWrappers.
Приложения и Примеры
Дистрибутив OSG включает в себя пять удобных утилит, нужных для отладки и полезных в процессе разработки OSG.


  • osgarchive—Это приложение позволяет вам добавлять файлы в архивный файл OSG .osga. Оно так же позволяет вам извлекать файлы и список содержимого архива.




  • osgconv—Это приложение конвертирует из одного формата файла в другой. Оно особенно полезно для конвертирования из любого формата в оптимизированный формат .ive.




  • osgdem—Это приложение является инструментом для преобразования данных о высотах и растровых изображений в подгружаемую базу данных земной поверхности.




  • osgversion—Это приложение выводит текущую версию OSG в std::cout поток, а так же дополнительную информацию о текущих изменениях и вкладе разработчиков в исходный код OSG.




  • osgviewer—Эта гибкий и мощный просмотрщик моделей. В разделе 1.3 Запуск osgviewer демонстрируется использование osgviewer более подробно.


Дистрибутив OSG так же идет с примерами программ, в которых демонстрируются возможности API. Исходный код примеров показывает многие концепции и техники программирования, необходимые при разработке приложений OSG.
1   2   3   4

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
www.vbibl.ru
Главная страница