2

有没有一种简单的方法来检测 2 个 GL 对象之间的碰撞?例如 glutSolidCylinder 和 glutSolidTorus

如果没有简单的方法,我如何引用这些对象,它们的位置?

如果我有他们的位置,应该考虑什么数学因素?

4

2 回答 2

7

不,没有简单的方法。无论如何,这些都不是 GL 对象,因为OpenGL 不知道任何对象,因为它不是场景图或几何库。它只是在屏幕上绘制简单的形状,例如三角形或点,而这正是glutSolidTorus朋友们所做的。他们不会构造一些具有位置等属性的抽象对象。他们在屏幕上绘制一堆三角形,使用当前的变换矩阵变换顶点。

当您要进行诸如碰撞检测甚至只是简单的对象和场景管理之类的事情时,您将无法自行管理对象,包括位置和几何图形等等,因为OpenGL 仅绘制三角形而没有概念他们可能组成的任何抽象对象

一旦您完全控制了对象的几何形状(它们由三角形和顶点组成),您就可以自己绘制它们和/或将它们提供给任何碰撞检测算法/库。对于此类数学上可描述的对象,例如球体、圆柱体,甚至是圆环,您还可以找到专门的算法。但请记住。您可以将这些事物作为具有您希望它们拥有的任何抽象属性的对象来管理,OpenGL 只是绘制它们,而这些glutSolid...函数只是简单的函数,只包含一个简单的glBegin/glEnd块。

于 2012-05-02T11:26:47.087 回答
1

您将需要一些检查和管理碰撞的系统,如果您想坚持使用 glut 对象,那么您需要将它们包含在其他一些类/几何表示中以检查交叉点。

关于物理/碰撞检测的一些有趣的阅读/链接:

www.realtimerendering.com/intersections.html

http://www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/ <他还有其他文章,2D的原理可以很容易地扩展到3维

http://www.dtecta.com/files/GDC2012_vandenBergen_Gino_Physics_Tut.pdf

编辑,这本书很好 imo:http ://www.amazon.co.uk/gp/product/1558607323/ref=wms_ohs_product

于 2012-05-04T16:11:18.480 回答