Использую TrueVision3D. Думал я думал и надумал следующее. Вот есть у меня в мире лес, к котором 1500 деревьев. Зачем создавать массив моделей
и 1500 раз загружать Tree.Oak.3ds, если можно загрузить один раз, но 1500 раз поменяв позицию и вращения отрендерить дерево. Поэтому я решил сделать класс сObjectTemplate, в котором будет храниться "шаблон". Т.е. в классе объявлены переменные, содержащие одинаковые для всех объектов мира свойстав (Имя шаблона, сама модель (геом.), масса, упругость ...). А для объекта сделать класс cObject, в котором будет имя шаблона, позиция (XYZ), ротация (XYZ), сумматор сил, скорость и тд.). Т.е. для отрисовки всей сцены нужен был такой код:
Public World as cObject_Collection 'коллекция элементов класса cObject
Public Templates as cObjectTemplate_Collection 'Коллекция шаблонов
- Код: Выделить всё
Sub RenderWorld
For Each obj in World
Templates(obj.TemplateName).Mesh.SetPosition Obj.GetPosition
Templates(obj.TemplateName).Mesh.SetRotation Obj.GetRotation
...
Template(obj.TemplateName).Mesh.Render
Next Obj
End Sub
Но не всё так просто... Дело в том, что стандартный предоставляемый движком метод RenderAllMeshes делал альфасорт. Т.е. чтобы за прозрачными объектами были видны объекты находящися за ними нужно рендерить сначала сначала дальние, потом ближние объекты. Пришлось в RenderWorld добавить алгоритм сортировки объектов по дальности от камеры. Но и это ещё не всё. 3дмакс почему-то не экспортирует в 3ds файлы анимацию, а анимацию всё-таки хочется. Поэтому придётся к каждому объекту приделать многомерный массив, в котором будут находиться позиции и нормали всех вертексов модели в определённый кадр. И при каждом рендеринге модели нужно будет переместить каждый вертекс. А если вертексов 10000 а моделей 500 + нужно сделать альфа-сорт + подсчитать физику + куча математики + расчёт путей и проч. деятельность АИ... И так каждый кадр... А не будет ли 2-5 FPS?
Вот и хочу узнать на чём лучше экономить на процессорном времени или бросить заниматься фигнёй и отвести каждому объекту по переменной с мешью и поломать голову и сделать скелетную аниму.