Обнаружение столкновений с ландшафтом OpenGL


person James Bennet    schedule 03.12.2011    source источник


Ответы (2)


Карту местности особенно легко проверить на наличие коллизий, поскольку карта местности — это карта от 2d точки (x, y) до высоты местности TERRAIN[x, y] в этой точке. Учитывая вашу плоскость чайника в (t_x, t_y, t_z), просто сравните ее высоту с высотой ландшафта в (t_x, t_y). То есть, если t_z ‹ TERRAIN[x, y], то вы разбились. Вы можете проверить несколько точек (например, углы куба с центром в центре чайника) на местности, чтобы получить более точный результат. В зависимости от грубости вашей карты местности вы можете выбрать ближайшую точку сетки или линейно интерполировать, чтобы вычислить высоту местности в произвольной точке.

person Community    schedule 03.12.2011
comment
Спасибо за подсказку! Это довольно гладкая местность, так как я применяю сглаживание как часть моего алгоритма LOD. - person James Bennet; 03.12.2011

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

Для этого у меня есть каждый класс (например, ракета, монстр, игрок, дерево и т. д.), подкласс класса Entity, который содержит логику, когда происходят столкновения, а это означает, что при запуске ракеты она может убить монстра, но только сжечь дерево ( предполагая, что у меня есть ракеты и деревья).

Хорошая книга, которой я следую, которая объясняет многое из этого гораздо более подробно:

http://www.amazon.co.uk/Beginning-OpenGL-Game-Programming-Second/dp/159863528X/ref=dp_ob_title_bk

person krslynx    schedule 03.12.2011