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

Подсказка

Если вы хотите, чтобы в вашей игре автомобили кренились, проходя повороты, вам придется переопределить методы CurrentCarDirection() и Update() в вашем производном классе автомобиля. Новые версии этих методов должны выполнять вращение в трехмерном пространстве, а не на плоскости.

Завершив создание двумерной матрицы вращения, метод CurrentCarDirection () создает двумерный вектор (в строках 48-52). В этом векторе хранится начальная ориентация автомобиля. Заметьте, что, поскольку автомобиль двигается в плоскости xz, в компоненте х вектора хранится компонент х направления, а в компоненте у вектора - компонент z направления.

В строках 55-56 листинга 15.2 метод CurrentCarDirection () умножает двумерный вектор на двумерную матрицу вращения. Результаты умножения он сохраняет в трехмерном векторе в строках 59-63. Метод завершается, возвращая этот трехмерный вектор.

Далее в листинге 15.2 приведен код метода Update (). Первая задача, которую выполняет этот метод — вызывает метод CurrentCarDirection (), чтобы получить текущую ориентацию автомобиля. Затем он нормализует вектор. Вспомните, что сила, прикладываемая к автомобилю ведущими колесами, направлена всегда вдоль оси z. Если автомобиль тормозит, то сила прикладывается в обратном направлении. Это позволяет программе разгонять и тормозить моделируемый автомобиль так же, как обычный автомобиль. Однако это значит, что метод Update () должен направлять силу, прикладываемую к автомобилю ведущими колесами, в направлении движения автомобиля. Кроме того, метод Update () должен знать текущую ориентацию автомобиля, чтобы правильно его разворачивать. Чтобы выполнить эти операции, метод Update () сначала вычисляет ориентацию автомобиля.

Если автомобиль движется и разворачивается, метод Update () поворачивает его на нужный угол в строках 93-99 листинга 15.2. Чтобы сделать это, он добавляет угол поворота к текущей ориентации. Поскольку крен автомобиля не моделируется, вращение выполняется только вокруг оси у.

Метод Update () прикладывает к автомобилю усилие от ведущих колес в строке 110. Он направляет это усилие в направлении движения автомобиля в строках 111-113. Поскольку это простейшая модель автомобиля, в ней усилия не прикладываются в точках соприкосновения колес с землей. Вместо этого это усилие прикладывается к центру масс автомобиля. Этот прием работает достаточно хорошо во многих играх.

Сила, прикладываемая к автомобилю ведущими колесами, — это импульсная сила. Она не является постоянно действующей, поскольку автомобиль может разгоняться или тормозиться с течением времени. Метод Update () сохраняет характеристики этой силы в строках 115-120.

В методе Update () демонстрируется простой метод вычисления сопротивления воздуха в строках 130-134 листинга 15.2. В строке 140 метода



Новости
Rust на Марсе с элементами PUBG
Выживать, как и следует из названия, придётся на Марсе. Помимо самого выживания, в игре присутствует и сюжет.
Переиздание Age of Empires выйдет 20 февраля
Как заявлено теперь, Age of Empires: Definitive Edition станет доступна на ПК с Windows 10 с 20 февраля 2018 года.