Снимает не камера, а фотограф.
Hародная мудрость
В этой статье я постараюсь показать принципы организации работы с камерой в играх на основе движка LKI Creator 3D.
Использование камеры
Что такое камера в 3D игре? Это виртуальное «око» игрока, то, посредством чего он воспринимает игру визуально. В понятие «камера» для LKI Creator 3D входят: точка расположения камеры и направление обзора — положение точки, куда направлен взгляд игрока.
Камеры бывают нескольких видов, могут быть статичными и подвижными и т.д. На игровой сцене может быть несколько камер.
На плоскости камер как таковых мы не использовали. Их заменяло смещение области видимости за объектом со свойством AlwaysShow = true.
В 3D сцене присутствует по умолчанию статичная камера, обозревающая область, прилегающую к началу координат. Теперь появилась возможность наделить ее динамическими свойствами.
Следим за нашим кораблем. |
Полетаем на собственной ракете — слежение. |
Для LKI Creator 3D возможна работа с камерой в двух режимах — следование за объектом и слежение. Если камера следует за объектом, она располагается позади него — в кильватере — и повторяет все его маневры. При слежении объект всегда находится в центре внимания — в центре экрана. Отличие от следования — камера не мечется за каждым поворотом объекта, предоставляя ему некоторую свободу маневра.
Следование за нашим ястребком — повторяем все его движения — «делай как я». |
Вживаемся в шкуру злобного инопланетянина — слежение. |
Эти режимы можно использовать для разных целей. Слежение позволяет лучше разглядеть объект во всех ракурсах.
При следовании виден только хвост, зато мы становимся фактически аватарой объекта — вживаемся в него, «смотрим его глазами».
Естественно, камеру можно повесить на любой объект — например, на корабль противника или на свою ракету.
Согласитесь, может довольно эффектно получиться, если выбросить этакий зонд в глубины неисследованного мира и, «смотря его глазами», познать все, что нужно.
Для использования данных режимов служат два флага объекта игрового мира LKI Creator 3D (класс TLKI3dGameObject). Флаг AlwaysShow используется для пометки объекта, за которым организуеться слежка, а флаг Follow — для объекта следования. Данные флаги начинают действовать, только когда объект приходит в движение.
Также есть методы SetViewObject и FollowObject игрового мира (наследника от класса TLKI3dGameWorld). Они также служат для пометки объекта слежения и следования, соответственно, но действуют и на объект, который пока еще неподвижен. Используйте эти методы при инициализации игровой сцены. Методам в качестве параметра передается индекс нужного объекта в массиве Objects игрового мира.
Вы можете динамически менять объект следования или слежения, но так как экран у нас всего один, то можно либо следовать, либо отслеживать только один объект в единицу времени.
К примеру, вешаем изменение объекта слежения на нажатие клавиши — и пожалуйста — сначала вы следите за главным кораблем, а вот уже летите на исследовательском зонде к планете, и тут же переключаемся к виду с одного из спутников и обозреваем сцену сбоку или сверху. В общем, есть простор для экспериментов.
Подготовка моделей 3D объектов
Про подготовку моделей для игр уже немного говорилось в предыдущих выпусках, но тема важная, так что добавим еще несколько советов.
Прежде чем приступить непосредственно к конструированию поведения объектов игрового пространства, необходимо подготовить для них описания, которые будут представлять их в 3D пространстве, — так называемые модели.
В 2D, то есть на плоскости, эту роль выполняли битовые образы — спрайты — в виде картинок в формате .bmp. Для 3D этого недостаточно — добавляется еще одно измерение. Для DirectX «родным» форматом является Direct X model *.x формат. Модели в этом формате содержат информацию о поверхности объекта, представленной полигонами, текстуре, натянутой на эту поверхность, нормалях, используемых для расчета освещения, и т.п.
Подробное описание формата можно свободно найти в интернете.
Поворот модели объекта — транспорта — вокруг оси OY на угол -90 градусов (270 градусов) |
Obj := XFiles.MeshKey('Trans'); Obj.Scale(TRANSPORT_SCALE); Obj.rotateY(-g_PI_DIV_2); |
Если после загрузки готовой модели в формате directx на сцену выясняется, что она повернута совершенно не так, как надо, то для правильной ее ориентации можно воспользоваться процедурами rotateX, rotateY, rotateZ. Они позволяют совершить поворот вокруг соответствующих осей; угол поворота в радианах передается в качестве единственного параметра.
Активное применение текстур для моделей позволит оживить сцену.
Замечание: так как задача подготовки моделей 3D объектов, а также текстур и анимации для них не входит в обязанность LKI Creator 3D, то для этого можно использовать дополнительные программные пакеты, например, 3D Studio Max. Кроме того, есть замечательный инструмент — DeepExploration, который позволяет просматривать модели практически во всех форматах, конвертировать их в нужный нам directx формат, а также удалять несущественные детали, инвертировать нормали (иногда это необходимо), группировать иерархию деталей модели в единую поверхность.