«Что мы хотим?.. Привлечь к себе любовь пространства...»
Б. Пастернак
Полетаем в 3D
В данной статье мы рассмотрим процесс создания игры на основе движка LKI Creator 3D. Воспользуемся хорошо нам знакомым «Звездным эскортом» и перенесем его в 3D пространство.
Алгоритм построения 3D мира несколько отличается от конструирования на плоскости и включает следующие основные этапы: подготовка 3D моделей для игровых объектов и программирование правил игрового мира.
Подготовка 3D моделей для объектов игрового мира
Прежде чем приступить непосредственно к конструированию поведения объектов игрового пространства, необходимо подготовить для них описания, которые будут представлять их в 3D пространстве, — так называемые модели.
В 2D, то есть на плоскости, эту роль выполняли битовые образы — спрайты — в виде картинок в формате .bmp. Для 3D этого недостаточно — добавляется еще одно измерение. Для DirectX «родным» форматом является Direct X model *.x формат. Модели в этом формате содержат информацию о поверхности объекта, представленной полигонами, текстуре, натянутой на эту поверхность, нормалях, используемых для расчета освещения, и т.п.
К сожалению, формат *.x пока не очень популярен, и быстро найти нужную модель в какой-либо библиотеке непросто. Однако существуют конверторы из многих форматов, в частности, из .3DS.и .MAX (родных для 3D Studio Max), в .x. Поэтому приходится идти немного кривым путем — находим нужную модель в подходящем формате, редактируем ее в каком-либо редакторе 3D моделек и конвертируем ее в .x формат. Причем важно обеспечить, чтобы модель представляла собой не иерархию составных частей, а единую поверхность — mesh. Такое требование выдвигает движок. Иначе нет гарантии, что объект появится в игровом пространстве.
В итоге вместо плоских суденышек получаем объемные космические корабли, которые выглядят достаточно внушительно.
Замечание: не создавайте моделей со слишком большой детализацией или большим количеством полигонов, старайтесь по возможности упростить их. Иначе в дальнейшем при анимации в игровом пространстве могут получиться большие тормоза и лаги.
Поведение объектов в 3D пространстве
При переходе в пространство по сравнению с версией на плоскости основные изменения претерпели функции работы с изменением положения объектов в пространстве.
Это и понятно — добавилось еще одно измерение.
Краткий итог:
AddObj — добавилась координата z.
TurnObj — добавился поворот вокруг осей y и z.
Добавление объектов в игровой мир |
|
Замечание: также изменились масштабы игрового мира. Теперь координаты уменьшились по абсолютной величине. За этим нужно следить, а то корабль улетит в дальние дали, и мы устанем его искать.
Расстояния между объектами стали меньше по абсолютной величине |
|
Насчет проверки столкновений. Ввиду сложности и больших затрат времени проверка пересечений полигонов моделей каждого с каждым практически неприемлема. Поэтому используются ограничивающие объемы. О них шла речь в одной из предыдущих статей. Однако при этом страдает точность проверок. Поэтому при выборе модели и задании правил их взаимодействия нужно это учитывать. Например, чем ближе форма объекта к шаровидной, тем выше будет точность. В будущем, видимо, перейдем на более точные методы OOB и AABB.