何时在OpenGL中执行3D碰撞检测



我正在制作一个使用各种高级图形方法的程序。目前,两个Wavefront对象模型被导入并呈现在屏幕上。我试图实现这两个对象之间的蛮力三角形-三角形碰撞检测,但我担心的是何时执行这些操作。在这个程序中我不会有动画和运动,我所要做的就是当我翻译(glTranslate)一个对象使它与另一个对象碰撞时,给碰撞的三角形上色。

我的碰撞检测功能应该与我的初始模型顶点工作,还是我需要以某种方式获得当前坐标?

最好将移动(如果你愿意的话)从绘图中分离出来。你可以使用空闲函数或计时器函数来移动波阵面并检查碰撞,并简单地将三角形标记为碰撞(或任何你想要表示它们碰撞的东西),然后强制重新绘制屏幕,你的绘图代码应该简单地清除屏幕并重新绘制所有顶点,并根据它们是否被标记为碰撞适当地着色。

碰撞检测很可能与你的模型顶点一起工作,但你需要跟踪你的对象在"空间"中的位置,以便适当地进行数学计算。

最好将这两个模块分开:渲染和物理/碰撞。

因此一个对象有两个表示:一个用于渲染(纹理,模型几何,材料等),一个用于物理(边界框,字空间位置等)

  • 物理不必如此完美,通常只需要一些网格近似。所以对于房屋物体,我们只使用边界框或边界球来测试碰撞。
  • 另一件事是碰撞层次:从低分辨率到高分辨率。首先只测试边界球体(便宜的测试),然后逐渐移动到三角形到三角形碰撞测试(相当昂贵)

最新更新