0

我正在尝试在圆圈(凝结)之间建立一个碰撞检测程序,对此我很陌生,我首先做了一个检测来检查每个圆圈。现在我有了创建某种边界框的想法,以便更精确地检查足够接近的圆(当有一组凝固的圆时更有效)。

现在,在我选择要仔细查看的对象后进行更精确的检测,openGL 是否可以通过检测像素重叠来查看两个对象是否重叠?

欢迎使用其他使碰撞检测更优化的技巧:)

谢谢你。

4

2 回答 2

3

OpenGL 没有这样的内置功能,尽管您可以在较旧 (<= 2.1) 版本的 OpenGL 中破坏“反馈”渲染模式。

也就是说,对于圆的特殊情况,有一种更快的方法来查找碰撞。对于一对候选圆,如果它们的中心之间的距离小于它们的半径之和,则它们重叠。更快的是,您可以使用平方距离并避免使用sqrt().

于 2012-04-26T21:35:39.107 回答
0

不知何故,openGL可以通过检测像素重叠来查看两个对象是否重叠?

OpenGL 没有碰撞检测例程。

OpenGL 有选择缓冲区,可用于获取在特定区域渲染的对象列表,但这没有用,因为要检测重叠,您需要知道可能发生重叠的区域。

通过滥用模板缓冲区,您可以获得重叠的像素列表(以及在某个像素上绘制了多少对象),但为此您必须从模板缓冲区读取数据并手动遍历每个像素。手动检查圆形碰撞会更快(10..100 倍)。除非您使用 8 个或更少的对象,否则您将无法使用模板缓冲区来确定在像素上绘制了哪些对象。

欢迎使用其他提示进行更优化的碰撞检测

使用树或“扫描和修剪”算法。

于 2012-04-26T22:05:19.233 回答