КАРТА САЙТА
  ПОИСК
полнотекстовый поиск
ФОРУМ ВИДЕО
ИГРЫ: НОВЫЕ    0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z А-В Г-З И-М Н-П Р-Я

СОЗДАЁМ ИГРУПАНЕЛЬ ИНСТРУМЕНТОВ

Автор материала:
Владимир Николаев
Опубликовано в журнале
«Лучшие компьютерные игры»
№1 (50) январь 2006
вид для печати

ЛКИ-Creator 3D: Звездный эскорт в 3D мире

«Что мы хотим?.. Привлечь к себе любовь пространства...»

Б. Пастернак

Полетаем в 3D

В данной статье мы рассмотрим процесс создания игры на основе движка LKI Creator 3D. Воспользуемся хорошо нам знакомым «Звездным эскортом» и перенесем его в 3D пространство.

Алгоритм построения 3D мира несколько отличается от конструирования на плоскости и включает следующие основные этапы: подготовка 3D моделей для игровых объектов и программирование правил игрового мира.

Подготовка 3D моделей для объектов игрового мира

24KB
19KB

Прежде чем приступить непосредственно к конструированию поведения объектов игрового пространства, необходимо подготовить для них описания, которые будут представлять их в 3D пространстве, — так называемые модели.

20KB
34KB

В 2D, то есть на плоскости, эту роль выполняли битовые образы — спрайты — в виде картинок в формате .bmp. Для 3D этого недостаточно — добавляется еще одно измерение. Для DirectX «родным» форматом является Direct X model *.x формат. Модели в этом формате содержат информацию о поверхности объекта, представленной полигонами, текстуре, натянутой на эту поверхность, нормалях, используемых для расчета освещения, и т.п.

К сожалению, формат *.x пока не очень популярен, и быстро найти нужную модель в какой-либо библиотеке непросто. Однако существуют конверторы из многих форматов, в частности, из .3DS.и .MAX (родных для 3D Studio Max), в .x. Поэтому приходится идти немного кривым путем — находим нужную модель в подходящем формате, редактируем ее в каком-либо редакторе 3D моделек и конвертируем ее в .x формат. Причем важно обеспечить, чтобы модель представляла собой не иерархию составных частей, а единую поверхность — mesh. Такое требование выдвигает движок. Иначе нет гарантии, что объект появится в игровом пространстве.

В итоге вместо плоских суденышек получаем объемные космические корабли, которые выглядят достаточно внушительно.

Замечание: не создавайте моделей со слишком большой детализацией или большим количеством полигонов, старайтесь по возможности упростить их. Иначе в дальнейшем при анимации в игровом пространстве могут получиться большие тормоза и лаги.

Поведение объектов в 3D пространстве

При переходе в пространство по сравнению с версией на плоскости основные изменения претерпели функции работы с изменением положения объектов в пространстве.

Это и понятно — добавилось еще одно измерение.

Краткий итог:

AddObj — добавилась координата z.

TurnObj — добавился поворот вокруг осей y и z.

Добавление объектов в игровой мир

//добавляем новый объект — указыеваем координаты x,y и z

   World.AddObj(true, 1, 0, 0, 0, 30, 0, 50, 13);

   Objects[0].AlwaysShow := true;

//поворачиваем объект с индексом 0 на 90 градусов вокруг оси 0y и на 0 — вокруг 0z

   TurnObjTo(0, 90, 0, true);

   World.AddObj(true, 2, 1, 1, 0, 6, 7, 150, 12); // Транспорт

   TurnObj(1, 90, 0);

   Objects[1].Turn(90,0);

   World.AddObj(false, 0, 1, 1, -1, 0, 6, 1000);

   World.AddObj(false, 0, 1, 1, 10, 0, 6, 1000);

Замечание: также изменились масштабы игрового мира. Теперь координаты уменьшились по абсолютной величине. За этим нужно следить, а то корабль улетит в дальние дали, и мы устанем его искать.

Расстояния между объектами стали меньше по абсолютной величине

// порождаем новых инопланетян

   if Tick-AlienTime > 10000 then begin

//: изменились расстояния

        ax := Random(2)+2;

        if Random<0.5 then ax := -ax;

        ay := Random(2)+2;

        if Random<0.5 then ay := -ay;

        az := Random(2)+2;

        if Random<0.5 then az := -az;

        if Random<0.7 then

           World.AddObj(true, 4, Objects[0].x + ax,

          Objects[0].y + ay,

          Objects[0].z + az,

          20, 9, 10, -1)

         else

           World.AddObj(true, 5, Objects[0].x + ax,

          Objects[0].y + ay,

          Objects[0].z + az,

          15, 10, 25, -1);

         AlienTime := Tick;

      end;

Насчет проверки столкновений. Ввиду сложности и больших затрат времени проверка пересечений полигонов моделей каждого с каждым практически неприемлема. Поэтому используются ограничивающие объемы. О них шла речь в одной из предыдущих статей. Однако при этом страдает точность проверок. Поэтому при выборе модели и задании правил их взаимодействия нужно это учитывать. Например, чем ближе форма объекта к шаровидной, тем выше будет точность. В будущем, видимо, перейдем на более точные методы OOB и AABB.


* * *

Статьи появляются на сайте не ранее, чем через 2 месяца после публикации в журнале.
ЧИТАТЕЛЬСКИЙ
РЕЙТИНГ
МАТЕРИАЛА
8.7
проголосовало человек: 61
1 2 3 4 5 6 7 8 9 10
вверх
Rambler's Top100 Рейтинг@Mail.ru Яндекс цитирования