Платформа Java3D. Источники информации Мы будем использовать следующие источники иформации: 1. и иже с ним 2.j3d tutorial (!) 3.j3d.

Презентация:



Advertisements
Похожие презентации
Платформа Java3D. Источники информации Мы будем использовать следующие источники иформации: 1. и иже с ним 2.j3d tutorial (!) 3.j3d.
Advertisements

©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Елизарова Наталья Евгеньевна учитель информатики и ИКТ НОУ РО «Гнилицкая православная гимназия» Построение и модификация диаграмм.
Аффинные преобразования Графический конвейер Астана. Лекция 7.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
1 Диаграммы реализации (implementation diagrams).
1 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) Дано прямоугольное поле, расчерченное на клетки: n клеток в высоту и m клеток в ширину.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
ПРОЕКТ СРЕДЫ РАЗРАБОТКИ СПЕЦИАЛИЗИРОВАННЫХ СИСТЕМ ВИЗУАЛИЗАЦИИ П.А. Васёв ИММ УрО РАН, Екатеринбург XII Международный семинар «Супервычисления и математическое.
Вставка объектов в документ Построение диаграмм. Вставлять диаграммы в документы Microsoft Word позволяет приложение Microsoft Graph Диаграмма может отображать.
OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
3. Разработка электронной презентации. Цели: Научиться: Добавлять встроенную анимацию Делать настройку времени Делать анимацию текста и объектов Делать.
XML eXtensible Markup Language 1.Пространства имён (Namespaces) 2.Язык навигации внутри XML-документа (XPath)
Создание форм в Access Выполнил: Усманов Шохрух. Формы это важнейшие объекты базы данных, окна, через которые пользователи могут просматривать и изменять.
Microsoft Excel 2003 Irina Kisseljova Темы Графики и диаграммы.
Курсовой проект по предмету «Информатика» Математическая модель руки фехтовальщика Выполнил: Студент гр.20510/1 ФМФ Дзенушко Дайнис.
Ключевые слова 1.WWW 2.Структура Web-страницыHTML 3.HTML-редактор 4.Цветовые схемы 5.гиперссылка.
Основы объектно-ориентированного программирования (ООП)
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Программировани е Сергей Салищев Занятие 1. Введение.
Транксрипт:

Платформа Java3D

Источники информации Мы будем использовать следующие источники иформации: 1. и иже с ним 2.j3d tutorial (!) 3.j3d API specification 4.java3d API documentation J3D tutorial отстает по версии от API (1.2 < 1.6) // 2001г. - tutorial

Средства разработки (IDE) Будем, как обычно, использовать Eclipse. Нужно будет скачать дополнительные пакеты Java3D Java 3D downloads: Библиотеки: 1.j3dcore.jar 2.j3dutils.jar 3.vecmath.jar Помимо Java3D еще существует JOGL – JavaOpenGL. Java3D использует для построения изображения под разными ОС разные графические API – Microsoft DirectX (только под Windows) и OpenGl (под различные ОС) (в находящемся в разарботке Java3D 2.0 заявлена поддержка DirectX 10)

Главы Java3D Getting StartedCreating ContentInteractionAnimationLightsTextures

Основные понятия (1) Scene graph (Граф сцены) - расположение 3-хмерных объектов в древовидной структуре, которое полностью определяет содержимое виртуальной вселенной, а также то как вселенная должна быть отренедрена (rendered) Иерархия классов Java3D - коллекция объектов, описывающих отображаемую виртуальную вселенную. javax.media.j3d package - в API определено более 100 классов в пакете Их часто называют Java3D core classes. Для простых сцен достаточно десятка объектов. Помимо пакета Java3D core, часто используются и другие. com.sun.j3d.utils package – его часто называют Java3D utility classes. Сore class package включает в себя лишь низкоуровневые классы, необходимые для программирования на Java3D. Utility classes – удобные и мощные классы, в добавление к основным. 4 основных категории utility classes: content loaders, scene graph construction aids, geometry classes, and convenience utilities. java.awt package javax.vecmath package javax.vecmath package определяет классы для работы с точками. Векторами, матрицами, …

Основные понятия (2) visual object – объект графа сцены (например, куб или сфера) object – экземпляр класса content – в целом объекты графа сцены Виртуальная вселенная создается из графа сцены. Узел – элемент данных (экземпляр класса из Java3D). Дуга – отношение между элементами. 2 типа отношений: parent-child relationship. Так Group node может иметь любое число детей и только одного родителя. Leaf node может иметь только одного родителя и не может иметь детей. reference relationship. Ссылка ставит в соответствие объекту класса NodeComponent объект класса Node из графа сцены. Объекты NodeComponent определяют атрибуты геометрии и представления объектов, используемые для построения сцены. Дерево => не должно быть циклов. Единственный путь от корня до листа - scene graph path. Атрибуты визуализации любого объекта зависят только от пути до него в графе сцены. У программиста Java3D обычно нет возможности контролировать процесс рендеринга объектов. (OrderedGroup class node)

Пример графа сцены

Неверный граф сцены и его fix Об ошибке нам сообщат на этапе выполнения: multiple parent exception Все будет скомпилировано, но не будет отображаться.

Тонкости с Virtual Universe, Locale У любого графа сцены единственная Виртуальная Вселенная. У объекта VirtualUniverse может быть несколько объектов Locale (хотя у большинства все-таки один). Locale – вход в виртуальную вселенную. Его можно себе представлять как ориентир, по которому определяется положение объектов. В программе на Java3D может быть более одного объекта VirtualUniverse, т.е. более одной виртуальной вселенной. Однако нет встроенного способа коммуникации между ними. Объект не может существовать в нескольких виртуальных вселенных Locale – корень нескольких подграфов в графе сцены. Объект BranchGroup – корень подграфа (ветви графа). 2 вида подграфов: view branch graph (положение и направление камеры) content branch graph (геометрия, внешний вид, поведение, положение, звук, освещение)

ScreenGraphObjectNodeGroupBranchGroupTransformGroupLeafShape3dLightBehavior NodeComponent Иерархия классов Java3D

Рецепт написания программы на Java3d Авторы Java3D API Рекомендуют следующий алгоритм создания программ на Java3D 1. Создать Canvas3D (наследник Canvas из AWT) 2. Создать VirtualUniverse 3. Создать Locale и присоединить к VirtualUniverse 4. Создать view branch graph a. View b. ViewPlatform c. PhysicalBody d. PhysicalEnvironment e. Присоединить объекты ViewPlatform, PhysicalBody, PhysicalEnvironment, Canvas3D к View 5. Создать content branch graph(s) 6. Скомпилировать branch graph(s) 7. Присоединить полученные подграфы к Locale Зачастую программы на Java3D имеют одинаковую систему view branch graph. Ввиду этого используют класс SimpleUniverse (вместо шагов 2,3,4)

View branch graph, созданный SimpleUniverse использует экземпляры удобных классов ViewingPlatform и Viewer вместо основных классов (View Platform, View) используемых для создания view branch graph в первом рецепте.

Простой рецепт Таким образом, создание программы становится еще менее муторным: 1. Создать Canvas3D 2. Создать SimpleUniverse ссылающийся на только что созданный Canvas3D и подходящим образом настроить SimpleUniverse 3. Создать content branch 4. Скомпилировать content branch graph 5. Вставить content branch graph в Locale нашей SimpleUniverse Конструктор SimpleUniverse: SimpleUniverse() SimpleUniverse(Canvas3D canvas3D) View branch graph включает в себя image plate. Image plate – прямоугольная область, в которую проецируется содержимое сцены в процессе рендеринга. Так, в качестве image plate можно представлять себе объект Canvas3D – он предоставляет соответствующее изображение в окне на мониторе компьютера.

Процесс рендеринга По умолчанию, image plate находится в начале координат. Система координат Декартова. Вверх – ось y. Вправо – ось X. На наблюдателя – ось Z.

Еще немного теории(1) У класса ViewingPlatform есть метод void SetNominalViewingTransform() Отодвигает камеру на 2.41 единицы (метра). С этого расстояния, при стандартном поле видимости, объекты высоты и ширины 2 метра полностью заполняют image plate. У класса SimpleUniverse есть методы: void addBranchGraph(BranchGroup bg) ViewingPlatform getViewingPlatform() Перед тем, как наконец-то начать писать программы на Java3D, определим еще 2 понятия… А именно, термины live и compiled. Добавление branch graph в Locale делает ветвь live (живой), а следовательно и все объекты этой ветви (branch graph) тоже живыми. У этого есть несколько последствий. 1) Живые объекты будут отрендерены. 2) Кроме того, нельзя изменять параметры живых объектов, если только не установлена соответствующая capability (способность) у объекта, перед тем как тот станет живым. BranchGroup objects могут быть откомпилированы. Компиляция объекта BranchGroup (и всех его предков(?)) превращает его в более удобную форму для рендерера (того, кто занимается рендерингом изображений)

Еще немного теории(2) Класс BranchGroup имеет метод compile() Класс SceneGraphObject имеет методы: boolean isCompiled() boolean isLive() Нет большой красной кнопки start the renderer!. Рендерер Java 3D начинает крутиться в бесконечном цикле, когда branch graph с экземпляром класса View становится живым в virtual universe. Концептуально: while(true) { Process input If (request to exit) break Perform Behaviors Traverse the scene graph and render visual objects } Cleanup and exit