Когда выполнять 3D обнаружение столкновений в OpenGL?

Я делаю программу, которая использует различные передовые графические методы. На данный момент две модели Wavefront obj импортированы и отображаются на экране. Я пытаюсь реализовать обнаружение столкновения треугольника и треугольника грубой силой между этими двумя объектами, но меня беспокоит, когда выполнить эту операцию. У меня не будет анимации и движения в этой программе, все, что я хочу сделать, — это когда я перевожу (glTranslate) один объект так, чтобы он сталкивался с другим, чтобы раскрасить сталкивающиеся треугольники.

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

1

Решение

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

Обнаружение столкновений, скорее всего, будет работать с вершинами вашей модели, но вам нужно отслеживать, где в «пространстве» ваш объект должен выполнять математику соответствующим образом.

1

Другие решения

было бы лучше разделить эти два модуля: рендеринг и физика / столкновение.

таким образом, один объект имеет два представления: одно для рендеринга (текстуры, геометрия моделей, материалы и т. д.), а другое для физики (ограничивающая рамка, положение в пространстве слов и т. д.)

  • физика не должна быть настолько совершенной, и обычно требуется лишь некоторое сеточное приближение. Таким образом, для объекта дома мы будем использовать только ограничивающий прямоугольник
    или ограничивающая сфера для проверки столкновения.
  • Другое дело иерархия столкновений: от низкого разрешения до высокого. Сначала проверьте только ограничивающие сферы (дешевый тест), затем постепенно переходите к тесту столкновения треугольника к треугольнику (довольно дорого)
0