2

这可能是一个更普遍的opengl问题。使用 OpenGL ES for 2d,并阅读教程,我学会了如何进行基本的矩阵变换,比如在屏幕上旋转和移动对象。到目前为止,一切都很好 - 我有一些物体在移动和旋转。

我的下一步是进行碰撞检测。像检查边界框之间的交叉点这样简单的事情可能就可以了。但是,我被卡住了,因为为了知道边界框何时相交,我必须知道我的对象的平移、旋转坐标。但我找不到从 OpenGL 获取这些数字的方法。

所以我真的必须自己做旋转和变换,除了让OpenGL做它们,只是为了得到翻译后的坐标?或者有什么方法可以将当前矩阵应用于顶点并获得结果?OpenGL 不能比我快得多吗?

感谢您的帮助,对于通常如何完成此类事情,我将不胜感激。

4

2 回答 2

7

视觉信息和碰撞信息通常在游戏中单独处理。请注意,您应该在物理代码(即所有矩阵)中重用所有变换信息,而不是顶点信息。一开始听起来确实有点低效和反直觉。

原因之一是要求以多边形精度进行碰撞检测是不寻常的。相反,近似体积通常就足够了。

所以你很少会碰到一组多边形和另一组多边形——事实上你应该尽最大努力不去碰撞。您应该将球体与自身、盒子、线或“扫过”球体(胶囊)相撞。较大的非凸模型可以分解为多个凸体积并分别处理。

因此,如果您直接使用视觉网格进行碰撞,您的物理代码将比使用低细节网格或近似体积(如球体或盒子)慢得多。这有点痛苦,但碰撞的缓慢部分不是变换,而是实际检测 - 所以这种方法实际上运行得更快。

根据您的游戏,我会考虑尽可能多地使用球体——它们不需要旋转,而且测试很容易。在模型加载时,在几何体消失到 GPU 区域之前,它也很容易生成边界球。

本书是很好的资源,网上也有很多资料。

于 2009-09-06T05:04:42.797 回答
0

您应该自己进行平移和旋转。向 OpenGL 请求数据是非常低效的。图形引擎经常保留 OpenGL 数据(尤其是状态数据),并且只告诉 OpenGL 状态机它需要的最少信息。

于 2009-09-06T04:45:07.110 回答