四边形 OpenGL 之间的碰撞检测
Collision Detection between quads OpenGL
我正在制作一个简单的3D OpenGL游戏。目前,我有四个边界墙,随机分布的内墙和一个简单的四立方体供我的玩家使用。
我想在玩家和所有墙壁之间设置碰撞检测。使用边界墙很容易,因为我可以检查 x 或 z 坐标是否小于或大于一个值。问题出在内墙上。我有一个 glGenList,其中包含小矩形墙段,在初始设置时,我随机生成一个 x,z 坐标数组并将这些墙段转换为绘制场景中的这个位置。我还增加了一个旋转度,45 或 90,这使碰撞检测复杂化。
谁能帮助我如何在这里检测碰撞。我有每个墙壁部分的坐标,每个墙壁部分的大小以及玩家的坐标。
我会在玩家和墙壁周围查看一个有界的框,还是有更好的选择?
我认为您的问题主要是关于以一定角度检测与墙壁的碰撞,这与"检测点是否与线匹配"基本相同,这里有一个答案:
如何判断一个点是否属于某条线?
(代码可能是 C#,但它背后的数学适用于任何语言)。您只需将这些公式中的 Y 替换为 Z,因为 Y 似乎不是当前设计中的一个因素。
已经有很多关于如何进行"良好"碰撞检测的文章甚至书籍。当然,部分原因归结为"你想要非常准确还是非常快速的代码"——对于"完美"的模拟,你可能会为了精度而牺牲速度。在大多数游戏中,玩家的身体因为玩家经过了墙壁交叉路口而稍微"凹陷"了墙壁,这也许是可以接受的。
"划分空间"也很有用。常见的方法是"二进制空间分区",这里很好地描述和说明:http://en.wikipedia.org/wiki/Binary_space_partition
有关游戏编程的书籍应涵盖碰撞检测的基本原理。网络上也有很多关于它的文章,包括维基百科中的一个条目:http://en.wikipedia.org/wiki/Collision_detection
除了制作刚体物理引擎之外,人们可以使用点到平面的距离来查看是否有任何立方体角点距离平面小于 0.0f(我会使用 FLT_MIN 这样点的半径就很小)。您需要存储一个归一化的 3D 向量(长度为 1.0f 的向量)来表示平面的法线。如果从平面中心到点的矢量与普通法线之间的点积小于半径,则会发生碰撞。之后,您可以获取立方体的速度(矢量的长度),将其乘以 0.7f 以获得一些能量吸收,并将其存储为立方体的新速度。然后将立方体的归一化速度矢量反映在平面的法线上,然后将其乘以先前计算的立方体的新速度。
如果你真的想进入游戏物理领域,那就从这个家伙的github中获取一个拉力。我用他的书在游戏物理课上。书中有一些错误,所以一定要从github获取所有代码示例。他通过制造质量聚合物理引擎和刚体物理引擎。我也会复习矩阵和张量。
- 落砂模拟碰撞检测C++和SFML
- SFML 中的重力和碰撞检测
- 我的碰撞检测中的奇怪行为
- 如何为球形物体和三角形地形提供高效的碰撞检测和响应
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?
- 在碰撞检测方面苦苦挣扎.如何正确检测碰撞?
- 三角形-三角形碰撞检测问题
- 不同类别之间的C SFML碰撞检测
- 使用D3DXVECTOR C 的碰撞检测,发生碰撞后该怎么办
- 当我发生碰撞检测时,矢量迭代器不兼容
- 如何使用灵活的碰撞库在两个点云或点云与机器人末端执行器模型之间进行碰撞检测
- 优化碰撞检测C
- 使用碰撞检测来增加SFML 2.4中的游戏分数的问题
- 使用OnComponentHit UE4 C++进行碰撞检测
- 体素世界中的碰撞检测
- 使用SFML在C 中的非轴对准圆和矩形之间的碰撞检测
- 四边形 OpenGL 之间的碰撞检测
- 追逐玩家的实体之间的碰撞检测
- 任意大小凸多边形之间的碰撞检测算法