Конгер Д.
Физика для разработчиков компьютерных игр
стр. 445

Чтобы реализовать метод CurrentDirection (), код которого приведен в листинге 16.2, я добавил к платформе классы matrix4x4 и vec-tor_4d, реализующие соответственно четырехмерные матрицы и векторы. Они понадобятся нам, чтобы выполнять преобразования в трехмерном пространстве. Точнее говоря, в методе CurrentDirection () объекты классов matrix4x4 и vector_4d используются для вращения вектора, указывающего вперед. Вспомните, что в классе basic_f Iyer есть вектор initialForwardDirection, в котором хранится изначальное направление вперед. Метод CurrentDirection () передает углы поворота, хранящиеся в классе rigid_body, от которого унаследован класс basic_flyer, методу RotateXYZ () класса таtrix4x4. Метод RotateXYZ () вращает вектор, хранящийся в элементе initialForwardDirection, на углы, указанные методом rigid_body: : CurrentOrientation (). В результате получается вектор, указывающий в текущем направлении «вперед» летательного аппарата.

Метод CurrentUpDirection () работает почти так же, как и метод CurrentDirection (). Единственное действительное отличие в том, что метод CurrentUpDirection () вращает вектор, указывающий направление «вверх» у летательного аппарата. Это направление не обязательно направлено вертикально вверх относительно поверхности земли. Если летательный аппарат выполняет бочку и находится в перевернутом состоянии, то вектор «вверх» будет указывать прямо в землю.

Код метода Update () класса basic_f Iyer приведен в строках 21-70 листинга 16.2. Он поворачивает летательный аппарат из текущей ориентации на углы, указанные в private-элементе данных turn_angles.

Кроме того, метод Update () вращает вектор скорости летательного аппарата. Это приводит к тому, что летательный аппарат непрерывно двигается в том направлении, в котором он ориентирован. Чтобы повернуть вектор скорости, метод Update () сначала находит направление, в котором ориентирован летательный аппарат. Затем он преобразует вектор направления в единичный вектор в строке 56. Затем метод Update () находит величину вектора скорости и умножает на нее единичный вектор направления. В строке 62 метод задает новый вектор поступательной скорости. Он также сбрасывает в 0 углы поворота в строке 66. Прежде чем метод заканчивает выполняться, он обновляет данные о местоположении летательного аппарата, вызывая метод rigid_body: : Update ().

Использование класса basic_flyer

Создание авиасимулятора с помощью класса basic_f Iyer потребует всего пары сотен строк кода. Основные операции, которые нужно выполнить, таковы:

1.    Инициализировать Direct3D.

2.    Инициализировать геометрию сцены и объект класса Ьа-sic_flyer.

3.    Обработать данные, вводимые пользователем.



Новости
Разработчики Theme Hospital создают новую игру Two Point Hospital
Осенью должен состояться выход нового игрового проекта Two Point Hospital, над которым работают создатели симулятора Theme Hospital.
Геймеры собирают деньги на помощь русским сиротам
Сервис Humble Store и компания Tripwire Interactive поддержат организацию Change30. Британцы предоставляют помощь русским сиротам.