Конгер Д.
Физика для разработчиков компьютерных игр
стр. 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.    Обработать данные, вводимые пользователем.



Новости
Финальный сезон The Walking Dead закончится в декабре
Создатели интерактивной драмы The Walking Dead из Telltale представили расписание выхода всех эпизодов финального сезона проекта.
Пользователи «ВКонтакте» могут официально поддержать Альянс или Орду
С 15 и до 29 августа каждый пользователь социальной сети может официально поддержать одну из двух противоборствующих сторон: Альянс или Орду.