В OpenSceneGraph




НазваниеВ OpenSceneGraph
страница3/4
Дата публикации30.03.2013
Размер0.53 Mb.
ТипДокументы
www.vbibl.ru > Информатика > Документы
1   2   3   4

Рисунок 1-4

Времена обходов отображены графически

Здесь показаны графики типичных времен обходов в приложении с включенной синхронизацией 60Hz монитора. Время, потраченное на обход событий и обновления, столь незначительно, что его даже не видно на выводимых графиках. Тем не менее, обходы отсечения и отрисовки занимают 5.68 и 3.42 миллисекунд соответственно, голубая и темно желтая полоски на графике располагаются в пределах одного кадра. Последняя, коричневая полоска указывает, что GPU требуется 5.38 миллисекунд для обработки команд отображения, замеренных OpenGL.
1.3.5 Запись Анимации
Разработчикам требуются повторяемые наборы тестов для эффективной настройки и измерения производительности отображения приложения. Для облегчения настройки производительности, osgviewer позволяет вам легко записывать последовательность движения камеры и затем проигрывать ее. Эта последовательность называется путь анимации.
Когда запущен osgviewer, нажмите клавишу ‘z’. Это заставит osgviewer начать запись пути анимации. Вращайте модель, приблизьте или удалите ее с помощью мыши; OSG записывает все перемещения камеры. Наконец нажмите shift-‘z’. Это остановит запись пути анимации, и сразу же начнет проигрывать ее с начала. osgviewer анимирует модель, используя записанные перемещения камеры.
Выйдите из osgviewer по клавише Escape, и посмотрите на список файлов в вашей текущей директории. Вы увидите новый файл, saved_animation.path. Как видно из его имени, этот файл содержит записанный путь анимации. osgviewer записывает этот файл в момент нажатия вами клавиши shift-‘z’. Для того чтобы проиграть этот путь анимации, выполните следующую команду:
osgviewer –p saved_animation.path cow.osg
Во время проигрывания пути анимации, osgviewer выводит оставшееся время в std::cout. Если osgviewer не отображает эту информацию в вашей оболочке, нажмите Escape чтобы выйти из osgviewer. Установите переменную окружения OSG_NOTIFY_LEVEL в значение INFO и перезапустите osgviewer.
1.4 Компиляция OSG Приложений
Чтобы собрать приложение на основе OSG, вам необходима среда разработки OSG, содержащая заголовочные файлы и библиотеки. Инсталляционная версия с сайта содержит только заголовочные файлы и оптимизированные библиотеки. Для создания отладочной версии библиотек, скачайте и соберите исходный код OSG сами. Получить исходный код OSG можно на OSG Wiki Web сайте [OSGWiki], в разделе Downloads. OSG Wiki Web сайт содержит инструкции по сборке OSG.
Для сборки OSG приложения вам понадобится сказать компилятору и компоновщику где искать файлы заголовков и библиотек. Вам так же надо сказать компоновщику, какие файлы библиотек OSG линковать. Вам так же может понадобится настроить некоторые параметры, зависящие от платформы. В следующем разделе описывается, как собирать OSG приложения на нескольких платформах.
Если настроить компилятор и компоновщик на неправильные параметры, компиляция вашего приложения завершится с ошибками, такими как “unable to open include file”, “unable to find library file”, “unresolved symbol”. Если вы столкнулись с такими ошибками, изучите сообщения об ошибках более тщательно и проверьте правильность заданных опций компилятора и компоновщика.
1.4.1 Apple Mac OS X
Инсталляционная версия с сайта для MacOS X, в файле .dmg, содержит папку XcodeTemplates. Эта папка содержит OSG Application Xcode шаблоны, которые позволят вам быстро собирать OSG приложения, используя среду разработки Xcode. Для того чтобы установить шаблоны OSG Application, прочтите файл TemplateNotes.rtf в папке XcodeTemplates. Посмотрите OSG Apple QuickTime документацию [MacOSXTips] для более подробной информации.
После установки шаблонов, запустите Xcode и создайте New Project. В диалоге New Project опуститесь ниже и выберите OSG Application. Шаблон создаст файл проекта Xcode настроенный на поиск OSG заголовков и библиотек, используя основу системы Xcode. Он так же включит простой main.cpp, в котором создается и отображается простой граф сцены. Ваше новое OSG приложение должно собраться и запуститься, но вам понадобится модифицировать код, чтобы добавить новые возможности.
1.4.2 Fedora Linux
Используйте команды g++ для компиляции и компоновки OSG приложений в Fedora Linux и большинстве других Linux и Unix подобных операционных системах.
В командной строке g++ задайте расположение заголовочных файлов OSG, используя опцию -I. По умолчанию OSG устанавливается в /usr/local/include, поэтому путь к заголовочным файлам в командной строке gcc должен выглядеть так.
-I/use/local/include/OpenSceneGraph/include
Подобным образом надо сказать компоновщику где искать библиотеки OSG. По умолчанию библиотеки OSG устанавливаются в /usr/local/lib, где компоновщик будет их автоматически искать. Если OSG был установлен в другое место, используйте опцию g++ -L, для установки расположения OSG библиотек.
Наконец скажите компоновщику, какие библиотеки подключать. Как описывается в разделе 1.6.3. Компоненты, OSG предоставляет несколько библиотек с различной функциональностью. Для компоновки OSG приложения с библиотеками osgViewer, osgDB, osgUtil, и osg, задайте все четыре библиотеки в командной строке g++.
-losgViewer –losgDB –losgUtil –losg
Эти библиотеки приведены в качестве примера, а то какие библиотеки реально необходимы вашему приложению, зависит от того какая функциональность вам нужна. Вам может понадобится компоновка с другими библиотеками, например такими как osgText, osgShadow, и osgGA.
1.4.3 Microsoft Visual Studio
Среда разработки от Microsoft, Visual Studio, позволяет вам создавать много типов проектов. Простейший путь создать OSG приложение это создать пустой проект Win32 консольного приложения.
До появления Visual Studio v8, некоторые опции компилятора были не совместимы с OSG. Откройте диалог Project Properties и убедитесь что Enable Run-Time Type Info установлена в Yes. Так же установите опцию Runtime Library в Multi-threaded DLL (или Multi-threaded Debug DLL для получения исполняемых файлов отладочного режима).
Используйте диалог Project Properties для того чтобы сказать компилятору где искать заголовочные файлы OSG. По умолчанию OpenSceneGraph устанавливается в C:\Program Files, поэтому добавьте следующий путь в свойство Additional Include Directories раздела C/C++.
C:\Program Files\OpenSceneGraph\include
Подобным образом вам надо сказать компоновщику где искать библиотеки OSG. Добавьте следующую директорию в свойство Additional Library Directories раздела Linker.
C:\Program Files\OpenSceneGraph\lib
Наконец скажите компоновщику, какие OSG библиотеки подключать. Добавьте имена файлов библиотек в Additional Dependencies диалога Project Property раздела Linker. В Microsoft Windows OSG собирает debug и release версии библиотек с различными именами. Для release сборки, использующей библиотеки osgViewer, osgDB, osgUtil, и osg, добавьте имена файлов следующих библиотек.
osgViewer.lib osgDB.lib osgUtil.lib osg.lib
Для отладочной сборки вставьте ‘d’ перед расширением файла.
osgViewerd.lib osgDBd.lib osgUtild.lib osgd.lib
Эти библиотеки приведены в качестве примера, а то какие библиотеки реально необходимы вашему приложению, зависит от того какая функциональность вам нужна. Вам может понадобится компоновка с другими библиотеками, например такими как osgText, osgShadow, и osgGA.
1.5 Введение в Графы Сцен
В предыдущем разделе уделялось внимание тому, откуда появилась OSG, как установить и запустить ее на вашей системе. Если вы, следуя инструкциям данным ранее в этой главе, дошли до этого места, значит вам удалось увидеть несколько интересных картинок с использованием OSG. Оставшаяся часть книги знакомит с OSG с нарастающей глубиной. В текущем разделе описываются графы сцен на концептуальном уровне. Раздел 1.6. Обзор OpenSceneGraph предоставляет высокоуровневое рассмотрение возможностей OSG. Наконец в Главе 2, Построение Графа Сцены, и Главе 3, Использование OpenSceneGraph в Вашем Приложении, описывается часть прикладного интерфейса OSG.
Граф сцены это иерархическая древовидная структура данных, которая организовывает данные в пространстве для эффективного отображения. На Рисунке 1-5 изображен абстрактный граф сцены, состоящий из земли, коровы и грузовика.
Граф сцены это дерево, на вершине которого корневой узел. Под корневым узлом располагаются групповые узлы, организующие геометрию и состояния отображения, контролирующие их появление. Корневые и групповые узлы могут иметь ноль и более потомков. (Тем не менее, групповые узлы без потомков ничего не делают.) Внизу графа сцены, листовые узлы, содержащие фактическую геометрию определяя объект в сцене.
Приложения используют групповые узлы для организации и расположения геометрии в сцене. Представьте 3D базу данных, содержащую комнату со столом и двумя одинаковыми стульями. Вы можете организовать граф сцены для этой базы данных многими способами. Рисунок 1-6 показывает один пример такой организации. Корневой узел имеет четыре потомка, являющиеся групповыми узлами, один для геометрии комнаты, один для стола, и по одному на каждый стул. Групповые узлы стульев помечены красным цветом, указывая что они перемещают своих потомков. Есть только один листовой узел со стулом, потому что стулья одинаковы—их групповые узлы предки перемещают один стул в два различных места, для того чтобы появилось два стула. Групповой узел стола имеет одного потомка, листовой узел стол. Листовой узел комнаты содержит геометрию пола, стен и потолка.
Графы сцен обычно предлагают ряд различных типов узлов, которые в свою очередь обладают широким спектром функциональности, а именно узлы переключатели, разрешают или запрещают своих потомков, узлы уровней детализации (LOD), выбирают потомка в зависимости от расстояния до наблюдателя, и узлы трансформации, перемещают геометрию своих потомков. Объектно-ориентированные графа сцен предоставляют многообразие использования наследования; все узлы унаследованы от одного общего базового класса, обобщая функциональность, переопределяемую в наследуемых классах.

^ Рисунок 1-5

Простой, абстрактный граф сцены

Для отображения сцены, состоящей из земли, коровы и грузовика, граф сцены принимает форму высокоуровневого узла с тремя узлами потомками. Каждый узел потомок содержит геометрию для отрисовки своих объектов.
Большое разнообразие типов узлов и их возможных комбинаций для организации в пространстве хранимых данных, не доступно в традиционных низкоуровневых API отображения. OpenGL и Direct3D в основном сфокусированы на абстрагировании от возможностей графического оборудования. Хотя графическое оборудование и позволяет хранить данные геометрии и состояния для последующего исполнения (например в дисплейных списках или объектах буферах), низкоуровневые возможности API для пространственной организации данных минимальны и примитивны по своей сути для большинства 3D приложений.
Графы сцен являются ПО промежуточного уровня, которые располагаются выше низкоуровневых API, и предоставляют возможность пространственной организации, а так же функции, обычно требуемые высокопроизводительным 3D приложениям. Рисунок 1-7 иллюстрирует типичный стек OSG приложения.
1.5.1 Возможности Графа Сцены
Графы сцен не только обеспечивают функциональность для управления геометрией и состоянием, присутствующую в низкоуровневых API отображения, но и предоставляют дополнительные возможности и способности, такие как:

^ Рисунок 1-6

Типичный граф сцены

Групповые узлы могут иметь несколько потомков, и позволяют приложению логически организовать данные геометрии и состояния. В данном случае, два групповых узла стула перемещают своего единственного потомка в два различных положения, приводя к появлению двух стульев.


  • Пространственная организация—древовидная структура графа сцены представляет собой естественным образом организованные данные в пространстве.




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



^ Рисунок 1-7

Стек 3D приложения

Вместо того чтобы напрямую обращаться к низкоуровневым API отображения, многим 3D приложениям требуется дополнительная функциональность от библиотеки промежуточного уровня, такой как OpenSceneGraph.


  • LOD—Расчет расстояния до видимого объекта, по ограничивающей геометрии, позволяет объекту быть эффективно отображенным с различными уровнями детализации. Более того, части сцены могут быть подгружены с диска, когда расстояние до наблюдателя попадет в заданную зону, и выгружены при выходе из этой зоны.




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




  • Минимизация изменения состояния—Для увеличения производительности приложения, излишних и не нужных изменений состояния надо избегать. Графы сцен обычно сортируют геометрию по состоянию для минимизации изменений, и менеджер состояния ресурсов OpenSceneGraph устраняет ненужные изменения.




  • Файловый Ввод/Вывод—Графы сцены хорошо подходят для чтения и записи 3D данных с диска. Будучи однажды загруженными в память, внутренняя структура данных графа сцены позволяет приложению легко манипулировать динамическими 3D данными. Графы сцены могут эффективно быть конвертированы из одного формата файла в другой.




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


Почти всем 3D приложениям требуются какие либо из перечисленных выше возможностей. Как результат, разработчики пишут свои приложения с помощью низкоуровневых API, реализовывая многие из этих возможностей, что увеличивает стоимость разработки. Используя имеющийся в наличии граф сцены, который уже полностью поддерживает эти возможности, позволяет быстро разрабатывать приложения.
1.5.2 Как Отображается Граф Сцены
Простейшая реализация графа сцены позволяет приложениям хранить геометрию и выполнять обход отрисовки, во время которого вся геометрия, хранимая в графе сцены, посылается оборудованию посредством OpenGL команд. Тем не менее, в такой реализации отсутствуют многие возможности, описанные в предыдущем разделе. Для того чтобы динамическая геометрия обновлялась, отсекалась, сортировалась и эффективно отображалась, графы сцены обычно предоставляют нечто более чем просто обход отрисовки. В общем, существует три типа обходов:


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




  • Отсечение—Во время обхода отсечения, библиотека графа сцены проверяет ограничивающий объем всех узлов на предмет включения их в сцену. Если листовой узел попадает в кадр, библиотека графа сцены добавляет ссылку на геометрию листового узла в финальный список отображения. Этот список делится на непрозрачные и прозрачные, и прозрачная геометрия далее сортируется по глубине.




  • Отрисовка—Во время обхода отрисовки (иногда называемой как обход отображения), граф сцены обходит список геометрий, сформированный во время обхода отсечения, и вызывает низкоуровневые функции API для отображения геометрии.


OSG включает в себя четвертый обход, обход событий, в котором на каждом кадре обрабатывается ввод и другие сообщения, это происходит прямо перед обходом обновления.
Рисунок 1-8 иллюстрирует эти обходы.
Обычно эти три обхода выполняются в каждом кадре. Тем не менее, в некоторых ситуациях бывает необходимо наблюдать сцену с нескольких различных точек зрения. Стерео отображение и много дисплейные системы, вот два примера. В этих ситуациях обход обновления выполняется один раз в кадр, но обходы отсечения и отрисовки выполняются каждый для своей точки зрения. (Дважды в кадр для простого стерео отображения, и один раз на кадр для каждой их графических карт в много дисплейной системе). Это позволяет системам с несколькими процессорами и графическими картами обрабатывать граф сцены параллельно. Обход отсечения должен быть операцией только для чтения, чтобы позволить многопоточный доступ.
1.6 Обзор OpenSceneGraph
OSG представляет собой набор библиотек с открытым исходным кодом, в которых в основном предоставляются услуги управления сценой и оптимизацией графического отображения, доступной для приложения. Они написаны на переносимом ANSI C++ и используют индустриальный стандарт низкоуровневого графического API OpenGL. В результате OSG является кросс платформенной и запускается на Windows, Mac OS X, и на большинстве UNIX и Linux операционных систем. В основном OSG не привязана к какой либо оконной системе. Тем не менее, в OSG включен код поддержки части специфической функциональности для систем управления окнами, такой как устройства ввода, создание окна, и PBuffer’ы.
Исходный код OSG открыт и доступен под модифицированной Стандартной Общественной Лицензией Ограниченного Применения GNU, или Library GPL (LGPL). Природа открытого исходного кода OSG дает много преимуществ:


  • Лучшее качество—OSG просматривают, тестируют и улучшают многие члены OSG сообщества. Более 250 разработчиков внесли свой вклад в OSG v2.0.



Рисунок 1-8

Обходы графа сцены

Отображение графа сцены обычно требует три обхода. На (a) обход обновления модифицирует геометрию, состояние отображения, или параметры узлов, для того чтобы гарантировать, что граф сцены находится в актуальном состоянии для текущего кадра. На (b) обход отсечения проверяет на видимость, и помещает ссылки на геометрию и состояние в новую структуру (называемую граф отображения OSG). На (c) обход отрисовки проходит по графу отображения и посылает команды отрисовки графическому оборудованию.


  • Лучшее качество приложений—Чтобы создавать качественные приложения, разработчик должен быть хорошо знаком с используемым ПО промежуточного уровня. Если исходный код этого ПО не доступен, то информация о нем закрыта и ограничена документацией поставщика и службой поддержкой пользователя. Открытый исходный код позволяет разработчику просматривать и отлаживать исходный код промежуточного ПО, потому что все внутренности открыты.




  • Сокращение расходов—Открытый исходный код бесплатен, поэтому общие расходы сокращаются.




  • Нет проблем с интеллектуальной собственностью—Невозможно скрыть нарушение патента в коде, который открыт и легко может быть прочитан.


Помощь по OSG легко можно найти, подписавшись на список рассылок osg-пользователей или обратившись за профессиональной поддержкой. За более детальной информацией обратитесь в Приложение: Куда Двигаться Дальше.
1.6.1 Дизайн и Архитектура
OSG разрабатывался в первая очередь для того чтобы быть переносимой и масштабируемой. Как результат, она подходит на многие платформы, и эффективно производит отображение на широком круге графического оборудования. OSG разрабатывалась гибкой и расширяемой, для того чтобы ее можно было адаптировать со временем. В результате OSG готова к встрече требований заказчика, когда они появятся.
Чтобы отвечать таким критериям дизайна, OSG основана наследующих концепциях и средствах:


  • ANSI стандарт C++.




  • Стандартная Библиотека Шаблонов (STL)




  • Паттерны проектирования [Gamma95]


Эти средства позволяют разработчикам, используя OSG, вести разработку на выбранной платформе, и переходить на любую другую платформу по требованию заказчика.
1.6.2 Соглашения об Именовании
Далее следует список, перечисляющий соглашения об именовании, принятом в исходном коде OSG. Эти соглашения не всегда выполняются. (Подгружаемые модули OSG, например, содержат много нарушений соглашений).


  • Пространство имен—Имя пространства имен OSG начинается с маленькой буквы, но может быть заменено на большую для ясности. Примеры: osg, osgSim, osgFX.




  • Классы—Имена классов OSG начинаются с большой буквы. Если имя класса состоит из нескольких слов, каждое следующие слово начинается с большой буквы. Примеры: MatrixTransform, NodeVisitor, Optimizer.




  • Методы классов —Имена методов OSG классов начинаются с маленькой буквы. Если имя метода состоит из нескольких слов, каждое следующие слово начинается с большой буквы. Примеры: addDrawable(), getNumChildren(), setAttributeAndModes().




  • Переменные члены класса—Имена переменных членов класса используют то же соглашение что и имена методов.




  • Шаблоны—имена шаблонов OSG используют маленькие буквы и подчеркивание между составными словами. Примеры: ref_ptr<>, graph_array<>, observer_ptr<>.




  • Статические—Статические переменные и функции начинаются с s_ или в противном случае используют то же соглашение что об именовании, что переменные члены классов и методов. Примеры: s_applicationUsage, s_ArrayNames().




  • Глобальные—Глобальные экземпляры классов начинаются с g_. Примеры: g_NotifyLevel, g_readerWriter_BMP_Proxy.


1.6.3 Компоненты
OSG времени выполнения представляет собой набор динамически загружаемых библиотек (или разделяемых объектов) и модулей. Эти библиотеки подразделяются на пять концептуальных категорий:


  • Библиотеки ядра OSG предоставляют необходимую функциональность графа сцены и отображения, а так же дополнительную функциональность, которая обычно требуется графическим 3D приложениям.




  • NodeKit’ы расширяют функциональность классов узлов ядра графа сцены OSG, и представляют собой высокоуровневые типы узлов и специальных эффектов.




  • Подгружаемые модули OSG это библиотеки, которые читают и записывают файлы с 2D изображениями и 3D моделями.




  • Библиотеки взаимодействия позволяют OSG легко быть интегрированным в другое окружение, включая скриптовые языки, такие как Python и Lua.




  • Богатая коллекция приложений и примеров предоставляет полезную функциональность и демонстрирует корректное использование OSG.


Рисунок 1-9 показывает организацию архитектуры OSG. В следующем разделе обсуждаются эти библиотеки более подробно.
Ядро OSG
Ядро OSG предоставляет базовую функциональность графа сцены, классы и методы для манипулирования графом сцены, дополнительную функциональность, которая обычно требуется графическим 3D приложениям, и доступ к подгружаемым модулям OSG для операций ввода/вывода над 2D и 3D файлами. Ядро состоит из четырех библиотек:


  • Библиотека osg—Эта библиотека содержит классы узлов графа сцены, которые использует ваше приложение для того чтобы строить графы сцены. Сюда так же входят классы векторной и матричной математики, геометрии, определение и управление состоянием отображения. Другие классы в osg предоставляют дополнительную функциональность, которая обычно требуется графическим 3D приложениям, а именно разбор аргументов, управление путем анимации, связью с ошибками и предупреждениями.




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




  • Библиотека osgDB— Эта библиотека содержит классы и функции для создания и отображения 3D баз данных. Она содержит реестр подгружаемых модулей OSG для операций с 2D и 3D файлами, а так же классы для доступа к этим модулям. Управление страницами базы данных osgDB поддерживает динамическую загрузку и выгрузку больших сегментов базы данных.




  • Библиотека osgViewer—Новая в OSG v2.0, эта библиотека содержит классы для управления настройками видимости сцены. osgViewer интегрирует OSG с широким диапазоном оконных систем.



^ Рисунок 1-9

Архитектура OSG

Библиотеки ядра OSG предоставляют функциональность, как для приложений так и для NodeKits. Вместе, библиотеки Ядра OSG и NodeKits образуют OSG API. Одна из библиотек Ядра OSG, osgDB, предоставляет доступ к операциям ввода/вывода 2D и 3D файлов, с помощью управления подгружаемыми модулями OSG.
Версия v2.0 содержит библиотеку, называемую osgGA, для адаптации событий от GUI элементов. Тем не менее, в ближайшем будущем, OSG будет перепроектирована и часть функциональности из osgGA перейдет в osgViewer.
В следующем разделе обсуждаются четыре библиотеки ядра более детально.
Библиотека osg
Библиотека osg является сердцем OpenSceneGraph. В ней определены ключевые узлы, образующие граф сцены, а так же несколько дополнительных классов, которые помогают в управлении графом сцены и разработке приложений. Часть этих классов кратко обсуждается ниже. Глава 2 рассматривает их более подробно и покажет вам, как использовать их в вашем приложении.
Классы Графа Сцены
Гласы графа сцены предназначены для построения графа сцены. Все классы графа сцены в OSG унаследованы от osg::Node. В принципе, корневые, групповые и листовые узлы относятся к различным типам узлов. В OSG все они все равно наследуются от osg::Node, и каждый конкретный класс предоставляет свою функциональность графа сцены. Так же, корневой узел в OSG не является специальным типом узла; это простой osg::Node, который не имеет предка.
^ Библиотека osg
Пространство имен: osg

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

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

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



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




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




  • Geode—Класс Geode (или Geometry Node) соответствует листовому узлу в OSG. Он не имеет потомков, но может включать в себя объекты osg::Drawable (смотрите ниже), содержащие геометрию для отображения.




  • ^ LOD—Класс LOD отображает своих потомков основываясь на расстоянии от них до точки наблюдения. Этот класс часто используется для создания различных уровней детализации объектов в сцене.




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




  • ^ Switch—Класс Switch содержит Логическую маску, которая разрешает или запрещает обработку своих потомков.


Это не полный список типов узлов OSG. Существуют другие типы узлов, такие как Sequence и PositionAttitudeTransform. Смотрите заголовочные файлы библиотеки osg для получения информации об этих типах узлов.
Классы Геометрии
Класс Geode является листовым узлом OSG, и содержит в себе данные геометрии для отображения. Используйте следующие классы для хранения данных геометрии в Geode.


  • Drawable—Класс Drawable является базовым классом предназначенным для хранения данных геометрии, а ^ Geode хранит их в std::list<osg::Drawable>. Drawable чисто виртуальный базовый класс, который не может быть непосредственно создан. Вы должны использовать унаследованные классы, такие как Geometry или ShapeDrawable (которые позволяют вашему приложению рисовать предопределенные геометрические формы, такие как сферы, конусы, и коробки).




  • Geometry—Класс Geometry в сочетании с классом PrimitiveSet, ведет себя как высокоуровневая обертка вокруг функциональности массивов вершин OpenGL. Geometry хранит массивы вершин, текстурные координаты, цвет и массивы нормалей.




  • PrimitiveSet—Класс PrimitiveSet предоставляет высокоуровневую поддержку команд OpenGL для отрисовки массива вершин. Используйте этот класс для определения типов примитивов, которые будут отрисовываться на основании данных, хранимых в классе Geometry.




  • Классы векторов (Vec2, Vec3, и т.д.)—OSG предоставляет набор предопределенных 2-, 3-, и 4 –элементных векторов типа float или double. Используйте эти вектора для определения вершин, цветов, нормалей, и текстурных координат.




  • Классы массивов (^ Vec2Array, Vec3Array, и т.д.)—OSG определяет несколько часто используемых типов массивов, таких как Vec2Array для текстурных координат. Для определения массива данных вершин, ваше приложение должно сохранять данные геометрии в этих массивах, прежде чем передавать их объектам Geometry.


Это может показаться слегка запутанным, но итог всего этого следующий: объекты ^ Geode являются листовыми узлами графа сцены, которые хранят объекты Drawable. Geometry (один из типов Drawable) хранит массив данных вершин и команды отображения массива вершин, определяющие эти данные. Сами по себе данные представляют собой массивы векторов.
1   2   3   4

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


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