Теперь библиотека движка развивается в двух вариантах:
- Версия для разработки, получила название “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. Особая благодарность Дворцину Александру за всестороннее тестирование движка, выявление ошибок и неточностей.

