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

строки 60 листинга 14.12. Из метода rigid_body: :Update () вызывается метод point_mass_base: :Update(). Метод point_mass_base: :Update () сбрасывает в 0 величину и вектор направления импульсной силы. Если бы вызов метода point_mass_base: : Update () был выполнен до просчета вращательной динамики, то этот метод сбросил бы их в 0 до просчета, и результаты моделирования были бы неверными. Поэтому вращательная динамика просчитывается первой.

Кроме того, важно, что в листинге 14.12 вызывается метод ро-int_mass_base::Update(), а не point_mass::Update(). В методе point_mass::Update() вызывается метод point_mass_base::Update (), и полученное перемещение сохраняется в глобальной матрице. Но при моделировании объекта класса rigid_body сначала нужно просчитать все повороты, а затем помещать в глобальную матрицу перемещения. Поэтому для просчета перемещений в строке 60 вызывается метод point_mass_base: : Update (). Затем создается матрица перемещений. После этого матрицы поворота и перемещения объединяются в строках 72-75. Это делается таким образом, что повороты будут выполнены до перемещения.

Замечание

На компакт-диске, прилагающемся к книге, обновленная версия платформы содержится в папке Source\Chapterl4\Framework.

Центр масс и точка начала координат сетчатой модели

Все программы, которые мы создали в предыдущих главах, подразумевали, что точка начала координат сетчатой модели объекта совпадает с его центром масс. В реальных играх это часто бывает не так. Поэтому в платформу нужно внести некоторые изменения, чтобы игры могли задавать эту точку независимо от центра масс. В листинге 14.13 приведено определение новой версии класса point_mass, в которой можно отдельно задавать координаты центра масс и начала координат сетчатой модели.

Чтобы физика трехмерных объектов работала правильно, позиции всех материальных точек и твердых тел в игре нужно отслеживать по их центрам масс. Точки начал координат сетчатых моделей используются только для рендеринга этих моделей.

Версия класса point_mass из листинга 14.13 содержит private-элемент данных meshOrigin. Кроме того, в классе есть методы чтения и установки значения этого элемента, в котором хранятся координаты точки начала координат сетчатой модели. Прототипы этих функций содержатся в строках 17-19.

Вектор meshOrigin должен задаваться относительно центра масс объекта. Если бы он задавался относительно начала глобальной системы координат игры, то поведение его было бы невозможно отследить.



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