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



Новости
В Fortnite нашли свастику. Создатели игры обещают удалить её
Свастику нашли четыре геймера, которые решили одновременно построить пол для танцев.
Бывший сотрудник Sony призвал игроков продолжить давление на японцев
Джон Смедли Смедли уверен, что игрокам и прессе стоит продолжать давление на Sony.