21.09.2009 автор Романов Алексей
Добавил пример и сходники к уроку «Использование PVS - дерева»
Вы можете скачать - исходник.

Рубрика: 3D, Infinity3D, Демо, Исходники, Примеры | Комментарии (3) »
17.09.2009 автор Романов Алексей
Теперь библиотека движка развивается в двух вариантах:
- Версия для разработки, получила название “Version for the development“. К номеру версии библиотеки прибавляется “D” например 1.4.D
- Версия для публикации, получила название “Version for release“. К номеру версии библиотеки прибавляется “R” например 1.4.R
Основные отличия этих двух версий:
- Версия для разработки прошита отладочным функционалом (как на уровне ввода данных, так и на уровне динамических расчетов): вывод подсказок, ошибок, сбор статистики и т.д., что замедляет скорость работы движка.
- Версия для релиза по максимуму очищена от проверок на ошибки, сбора статистики и выполнения различных операций, направленных на проверку правильности данных.
Концепция данного разделения проста:
При разработке проекта используется версия “Version for the development“, отлаживается весь проект, исправляются ошибки и неправильные данные. Затем весь проект публикуется версией “Version for release“, при этом скорость его работы возрастает.
Новые возможности:
- Добавлен новый объект Sprite3D. Спрайты являются полноценными полигональными объектами, врезаются в геометрию сцены, поддерживают все доступные материалы и т.д.;
- Добавлен новый объект Sound3D. Данный объект имитирует трехмерный звук, позволяет оживить сцену. Может выступать в роли контейнера для любых полигональных объектов;
- Добавлен новый материал DisplayObjectMaterial. Материал, заполняющий полигоны текстурой на основе DisplayObject’ов.
Добавления:
- В класс Object3D добавлено новое свойство visible. Свойство позволяет пропускать объект при рендеринге, но при этом не удаляет его со сцены, что очень важно для быстрой и удобной работы с объектами на сцене;
- В класс Object3D добавлено новое свойство priority. Свойство отвечает за последовательность добавления объектов в динамическое BSP - дерево, позволяет повысить производительность и уменьшить количество распилов BSP - деревом;
- В класс Object3D добавлено новое свойство collision. Свойство позволяет исключать объект и его детей из проверки на столкновения;
- В класс Object3D добавлен новый метод lookAt(). Метод перенесен из класса BaseController для большей функциональности;
- В класс Object3D добавлен новый метод сalculateObject(). Метод принудительно вызывает перерасчет матрицы объекта, а так же позволяет рассчитать матрицу объекта, не добавляя объект на сцену и не дожидаясь обновления сцены;
- В класс Object3D добавлен новый метод move(). Метод позволяет изменять координаты объекта сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств X, Y, Z, В систему сигналов добавляется лишь одно действие, а не три;
- В класс Object3D добавлен новый метод rotation(). Метод позволяет поворачивать объект сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств rotationX, rotationY, rotationZ, В систему сигналов добавляется лишь одно действие, а не три;
- В класс Object3D добавлен новый метод scale(). Метод позволяет масштабировать объект сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств scaleX, scaleY, scaleZ, В систему сигналов добавляется лишь одно действие, а не три;
- В класс MeshOptimization добавлен новый метод mergerMeshs(). Метод объединяет (сливает) геометрию полигональных объектов, не связанных иерархией (т.е. не выступающих ни родителями, ни детьми друг другу) и возвращает новый объект;
- В класс MeshOptimization добавлен новый метод mergerMeshChildren(). Метод объединяет всех детей родителя и добавляет их геометрию в геометрию родителя. Метод не учитывает детей детей родителя, но можно поэтапно проводить слияние;
- В класс MeshOptimization добавлен новый метод faceVerticesOnPlane(). Метод проверяет находятся ли все вершины грани в одной плоскости с определенной погрешностью;
- В класс UVCoords добавлен новый метод reset(). Метод обнуляет текстурные координаты;
- В класс DynamicBSPRender добавлено новое свойство autoPriority. Свойство позволяет отключать автоматическую расстановку приоритетов объектам и назначать приоритеты объектам вручную;
- В класс StatsDisplay добавлен новый метод appendControlHelpText(). Метод позволяет добавлять HTML - текст в качестве подсказок управления;
- В класс StatsDisplay добавлены новые свойства: _height и _width. Свойства позволяют получать размеры области вывода статистики для позиционирования других DisplayObject’ов на экране.
Расширения:
- При проверке на столкновения учитываются все полигональные объекты и их дети, ранее только объекты на основе Mesh;
- Расширен функционал класса StatsDisplay, помимо RenderTime (время, затраченное на мат. расчеты) выводятся DrawTime (время, затраченное на отрисовку сцены) и PhysicsTime (время, затраченное на физику). Также, выводится полная информация о сцене: количество объектов, камер, вершин, граней, треугольников и т.д.;
- Расширен функционал материала LoadingMaterial. По аналогии с загрузчиками можно подписаться на события: LoaderEvent.LOADING_COMPLETE, ProgressEvent.PROGRESS, IOErrorEvent.IO_ERROR, SecurityErrorEvent.SECURITY_ERROR. Перенесены все свойства материала BitmapMaterial для более удобного управления материалом.
- Камера при переходе в перспективный режим автоматически изменяет расстояние до ближней плоскости пирамиды видимости на 0, если оно было меньше 0, что позволяет избежать некоторых визуальных артефактов;
- Движок проводит автоматический поиск оптимальных объектов в роли сплиттеров при DynamicBSPRender фильтре, что обеспечивает более быструю работу BSP - дерева и уменьшает количество распилов.
- Ускорена “конвейерная” обработка путем определения актуальности выполнения тех или иных действий.
- Улучшено качество картинки при ортографической проекции путем расчета текстурных матриц для каждого треугольника отдельно (в версиях 1.1 - 1.3 расчет проводился для многоугольников, хотя в более старых версиях для треугольников).
- Теперь любой объект на основе Object3D может выступать в роли контейнера.
Изменения:
- Для большей функциональности метод lookAt () удален из класса BaseController и перенесен в класс Object3D;
- Расчет активного объекта PVS перенесен из проверки на столкновения в рендеринг, что позволяет без физики (без проверки камеры на столкновения) пользоваться PVS - деревом;
- Полностью переписан объект SkyBox. Можно применять любой доступный материал к граням SkyBox’a. Объект ведет себя как любой другой полигональный объект, за исключением того, что не участвует в столкновениях, игнорирует пирамиду видимости (но не клиппинг по области ViewPort’a) и всегда рисуется первым;
- Исправлено название класса Clipping. Ранее назывался Cliping.
Исправления:
- В методе addMaterialToAllSurface() класса Mesh исправлена ошибка;
- В методе getUVsByName() класса Mesh исправлена ошибка;
- В методе removeSurface() класса Mesh исправлена ошибка;
- Исправлена ошибка в классе DynamicBSPRender. Когда в пирамиду видимости не попадал ни один объект, вызов построения BSP - дерева все равно происходил, что вызывало ошибку;
- Исправлена ошибка в классе DynamicBSPRender. Когда в пирамиду видимости не попадал ни один объект, не происходило удаление из ViewPort’a старой графической информации;
- Исправлена ошибка в контроллерах. Если контроллеру не назначали камеру, он пытался управлять объектом со ссылкой на null, что вызывало ошибку;
- Решена проблема с округление flash playr’a, которая приводила к ошибочному расчету нормалей к граням.
P.S. Особая благодарность Дворцину Александру за всестороннее тестирование движка, выявление ошибок и неточностей.
Рубрика: 3D, Infinity3D, Новости, Обновления | Нет комментариев »
10.09.2009 автор Романов Алексей
Добавил еще тестовую демку показывающую разницу между BaseRender и DynamicBSPRender фильтрами и между Orthographic и Perspective режимами. С помощью подобных демок я провожу тестирование движка перед сборкой новой версии, а так же отслеживаю актуальность новых алгоритмов.

По количеству полигонов эта демка равна вот этому “краш тесту” http://www.infinity3d-engine.com/ru/blog/archives/323, но в отличии от того теста тут более сложная геометрия и демка больше приближена к реальному использованию.
В демки есть возможность переключать:
1) рендер фильтры;
2) переходить из перспективного режима в ортографический и обратно;
3) показывать ребра полигонов (и разбиения BSP - деревом);
4) можно включать разные виды анимации (включить анимацию пропеллеров или вращение всего вертолета или то и другое вместе);
5) возможность переключения качества отрисовки.
P.S. В демке загружается 3D модель вертолета в формате *.ase весом 747 кб и 2 текстуры 157кб и 54кб - так что вертолет не сразу появится.
Рубрика: 3D, Infinity3D, flash, Демо | Комментарии (21) »
08.09.2009 автор Романов Алексей
Добавил демку, демонстрирующую работу нового объекта в трехмерном пространстве Sound3D (будет доступен с версии 1.4). Объект Sound3D поможет оживить сцену. Можно создавать различные эффекты, а также позволит ориентироваться в трехмерном пространстве, опираясь не только на визуальную информацию, но и на звуковую (например, для игр - определять местонахождение других персонажей на игровой карте).

В демке используются 5 звуковых объектов. 4 из них расположены по углам сцены и радиус распространения звука равен 1000 пикселей, для наглядности на земле нарисована проекция сфер распространения звука. А 5 звуковой объект, крутится в центре сцены с радиусом распространения звука 1500 пикселей.
Рубрика: 3D, Infinity3D, flash, Демо | 1 комментарий »
07.09.2009 автор Романов Алексей
Для сравнения версий 1.3 и 1.4 выложил новую версию демки «полностью динамическое BSP - дерево».
В новой версии, проводится выборка оптимальных объектов в роли сплиттеров и система приоритетов объектов - уменьшают количество разбиений.

Вот та же демка на версии 1.3 без выборки оптимальных объектов и без системы приоритетов
http://www.infinity3d-engine.com/example/dynamicBSP.html - разбиения хаотичны.
Рубрика: 3D, Infinity3D, flash, Демо | Комментарии (3) »
06.09.2009 автор Романов Алексей
Добавил новый “краш тест”, на это раз проводим тестирование DynamicBSP - дерева. В демке используется 300 Box’сов и 2 двусторонние плоскости для увеличения количества разбиений. Так же демка динамическая, все объекты двигаются и крутятся.

Удалось решить проблему flash player’a при рисовании полигонов с разрывами при “LOW QUALITY”. Теперь, при любой детализации, и при рендеренге DynamicBSPRender фильтром, швы от распилов BSP - деревом почти исчезли. Динамическое дерево стало более стабильным, теперь нет хаотичного разбиения (проводится выборка оптимальных объектов в роли сплиттеров и система приоритетов объектов - уменьшают количество разбиений).
_______________________________________
Последнее обновление демки: 16.09.2009 (Оптимизирован и ускорен DynamicBSPRender фильтр)
Рубрика: 3D, Infinity3D, flash, Демо | Комментарии (14) »
31.08.2009 автор Романов Алексей
Рубрика: Infinity3D, Новости, Примеры, Статьи | Комментарии (12) »
28.08.2009 автор Романов Алексей
По просьбам, набросал демку, что-то вроде краш теста
. 1000 кубов, 6000 граней или 12000 треугольников, с динамическими текстурами, динамическими объектами, визуализацией culling алгоритмов и т.д.

Управление:
Key “Space” - animation on/off;
Key “E” - show edge on/off;
Key “Q” - change quality;
Остальное, как всегда + управление камерой с клавиатуры.
Рубрика: 3D, Infinity3D, flash, Демо | Комментарии (13) »
20.08.2009 автор Романов Алексей
По просьбе читателей выложил BSP версию демки «Cathedral».

Посмотреть можно здесь
Рубрика: 3D, Infinity3D, flash, Демо, Новости | Комментарии (14) »
18.08.2009 автор Романов Алексей
В версии 1.4 появится новый объект Sprite3D. В отличии от общепринятого понятия, что спрайты в трехмерном пространстве это точка, я сделал спрайты которые являются полноценными полигональными объектами.
Свойства объекта Sprite3D:
- ведут себя так же как и любой другой полигональный объект;
- врезаются в сцену, что обеспечивает абсолютную точность сортировки;
- в BSP-дереве могут выступать как сплиттеры;
- имеют ограничивающий примитив;
- могут участвовать в проверки столкновений;
- поддерживают все материалы;
- поддерживают все доступный мышиные события в трехмерном пространстве, реализованные классом Mouse3DEvent;
- удобное управление, все по аналогии с другими полигональными объектами.
Вот пример взаимодействия спрайтов и других трехмерных объектов. Обратите внимание, что все спрайты врезаются в геометрию сцены, что не реализовано ни в одном аналогичном движке.

Управление:
Key “Space” - animation on/off;
Key “E” - show edge on/off;
Key “Q” - change quality;
Остальное, как всегда.
Рубрика: 3D, Infinity3D, flash, Демо, Исходники | Комментарии (12) »