iphone - 有效使用 iPhone OpenGl ES 进行 2d(和碰撞检测)

标签 iphone opengl-es 2d rotation collision-detection

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

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

那么除了让 OpenGL 执行这些操作之外,我真的还必须自己执行旋转和变换才能获得转换后的坐标吗?或者有什么方法可以将当前矩阵应用于顶点并获得结果? OpenGL 不能比我快得多吗?

感谢您的任何帮助,我希望获得一些关于通常如何完成此类事情的一般建议。

最佳答案

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

原因之一是要求以多边形精度进行碰撞检测的情况并不常见。相反,大约的体积通常就足够了。

所以你很少会让一组多边形与另一组多边形发生碰撞 - 事实上你应该尽最大努力不这样做。您应该使球体与自身、盒子、线或“扫掠”球体(胶囊)碰撞。较大的非凸模型可以分解为多个凸体积并单独处理。

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

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

这个book是一个非常好的资源,而且有很多online以及信息。

关于iphone - 有效使用 iPhone OpenGl ES 进行 2d(和碰撞检测),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1384859/

相关文章:

ios - 在 iOS 中使用电子邮件和密码注册

opengl-es - 在 OpenGL ES 2 中正确进行 Sprite 四边形和深度测试

java - 有人可以解释一下我在这个二维数组游戏中做错了什么吗

C++ 和 SDL 纹理不会加载,但 SDL_GetError() 不会返回任何内容

c++ - 没有边界的预定义二维数组?

iphone - 在iPhone的初始屏幕中添加声音

ios - GPUImage 可用于 iOS 8 吗?

iphone - iOS6 中未调用 shouldAutoRotate 方法

opengl-es - 使用 webGL 库进行数据可视化和数据分析?

java - android上的数组加法