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

Первое определение в листинге 10.3 - это перечисление collision status. Этот тип предназначен для выделения возможных вариантов столкновений. Эти варианты показаны на рисунке 10.7.

В любой отдельно взятый момент времени два твердых тела, показанных на рисунке 10.7 как сферы, могут пребывать в одном из трех состояний. Они могут вообще не сталкиваться - и реагировать на столкновение не нужно. Они могут соприкасаться - и нужно просчитывать реакцию на столкновение. Если два тела двигаются быстро, они могут перейти из состояния отсутствия столкновения в состояние перекрытия за один кадр. Столкновения с перекрытием выглядят нереалистично на экране - кажется, что один объект находится внутри другого, хотя так быть не должно. Если происходит столкновение с перекрытием, приходится предпринимать дополнительные меры. В типе collision_status определены константы, позволяющие обозначать три этих типа столкновений.1

Определение класса collision начинается со строки 14 листинга 10.3. Класс содержит private-указатели на два твердых тела. Указатели используются, потому что нужно обновлять данные в объектах, участвующих в столкновении, а не создавать копии этих объектов.

В строках 21-32 класса collision содержатся прототипы методов, создающих объект и задающих его элементы. Код этих методов содержится в строках 43-80. Единственные методы, кода которых нет в файле PMCollision.h - это CollisionOccured() и CalculateReactions (). Код этих методов приведен в листинге 10.4. Он содержится в файле PMCollision.срр.

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

1

Если объекты двигаются очень быстро, и их размеры невелики, столкновения можно вообще не обнаружить. Представьте себе пулю, попадающую в крыло самолета. Скорость пули 700 м/с, а толщина крыла самолета - 0.3 м. Нужно пересчитывать координаты и проверять, есть ли столкновение, порядка 2000 раз в секунду, иначе можем не заметить столкновения (или применять другие методы обнаружения столкновений). - (Прим. перее.).

Новости
Аниме-трейлер Heroes of the Storm посвящён механическим обликам героев
Blizzard выпустила обещанные вместе с появлением в Heroes of the Storm огнемётчика Блэйза новые легендарные механизированные облики нескольких героев: Тираэля, Регара, Абатура и Дехаки.
45-минутная запись геймплея Metal Gear Survive
Японское подразделение IGN представило публике 45-минутную запись геймплея Metal Gear Survive – последней части знаменитой серии, а также первой, в создании которой не принимал участие Хидео Кодзима.