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

标签 opengl collision-detection

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

如果没有简单的方法,我该如何引用这个对象及其位置?

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

最佳答案

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

当您要进行诸如碰撞检测或什至只是简单的对象和场景管理之类的事情时,您将无法绕过管理对象,完成位置和几何图形以及诸如此类的事情,您自己再次仅限OpenGL绘制三角形时不考虑它们可能构成的任何抽象对象

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

关于opengl - 有没有一种简单的方法来检测 2 个 GL 对象之间的碰撞?例如 glutSolidCylinder 和 glutSolidTorus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411860/

相关文章:

java OpenGL lwjgl先绘制2D,然后绘制3d,然后绘制2d,错误

c++ - 使用 OpenGL 写入图像文件

c++ - 需要使用 glGetProgramiv 函数进行说明

swift - 如何在 SpriteKit 的自上而下 View 中检测游戏结束无尽的 runner 游戏

javascript - JS : Collision Detection doesn't work when Ball is moving faster

opengl - 如何在 Clarion 中正确传递数组地址?

c++ - glUniform4fv 导致 GL_INVALID_OPERATION

c++ - 如何检测来自不同类的 QGraphicsItem 和 QGraphicsPixmapItem 图像之间的冲突

ios - iOS 7.1 更新后 SpriteKit 游戏中的对象停止碰撞

collision-detection - 将球体与复杂的几何体碰撞并滑动