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

гарантированно нет. Использование внешнего блока и внутренних позволяет достичь высокой скорости работы, если столкновений нет, и высокой точности, если они есть.

Замечание

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

А обязательно ли всем ограничивающим поверхностям быть одинаковой формы? Проще говоря, можно ли использовать сферу для ограничения головы, цилиндры - для лап, и прямоугольники - для туловища и хвоста?

Конечно, можно. Это очень просто сделать, используя возможности наследования в языке C++. Чтобы использовать ограничивающие поверхности разных типов, можно создать базовый класс, от которого порождать все классы разных ограничивающих поверхностей. Назовем этот базовый класс bounding_volume, От него можно породить классы bounding_sphere для сфер, bounding_rectangle для прямоугольных блоков и bounding_cylinder для цилиндров. Все эти классы будут производными от bounding_volume, и их можно будет хранить в общих структурах данных.

Если уж мы упомянули структуры данных - как лучше всего хранить наши наборы ограничивающих поверхностей? Ответ: как хотите. Их можно хранить в статическом массиве объектов или массиве указателей на динамически создаваемые объекты. Часто их хранят в древовидных структурах, позволяющих быстро выполнять поиск.

Например, если потенциальное столкновение происходит около переднего края модели тигра из предыдущих примеров, можно проверить значения координат х и у в месте столкновения. Если начало системы координат совпадает с центром масс тигра, то значение х < 0 указывает, что столкновение, вероятно, произойдет возле головы. Поэтому сначала нужно проверить, есть ли столкновение с блоком 1, затем — с блоком 2, затем -с блоком 3. Поскольку х < 0, то проверять блоки 4 и 5 вообще незачем -если столкновения не было в блоках 1-3, значит, его не было вообще.

Предупреждение

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

Новости
Геймеры собирают деньги на помощь русским сиротам
Сервис Humble Store и компания Tripwire Interactive поддержат организацию Change30. Британцы предоставляют помощь русским сиротам.
Слух: На E3 2018 покажут Cyberpunk 2077
Крупное польское видеоигровое издание GRYOnline сообщило о том, что, согласно их собственным источникам в компании, CD Projekt Red готовит к E3 2018 новый трейлер Cyberpunk 2077.