我在过去几年中编写了自己的3D游戏引擎,并希望将其用于游戏。地形对象碰撞检测
我迷迷糊糊accros以下问题:
我在游戏的多面,但讲起一个单一的平面。当然,飞机不能潜入地面并在地形下飞行。因此,我需要实施一些能够检测飞机/喷气机与我的地面之间的碰撞的东西。
给出的信息如下:
- 网格地形[2-维阵列;在根据X专卖店高度,z坐标]
- 击中格我的飞机(它的动作与我的飞机,所以边界等等都已经计算和给予)
所以对hitboxes的: 我虽然约使用哪种方法。表现最好的一个似乎是不同半径的简单球体。
所以我现在需要的是最佳的类型击中格的(球体,AABB,...),并且根据最有效的计算。
我的尝试是让每个周围的三角形,并计算从那一个到我的hitbox球体的每个中心的距离。如果距离小于半径,则它已成功检测到碰撞。但是当我在我的飞机上有多达10/20个球体并且需要检查100个三角形时,这需要很长时间。
另一个尝试是从每个hitbox球体获得与地面的垂直距离。这需要更少的计算,但靠近陡峭的表面时会失败。
我将非常高兴,如果有人愿意帮助我实现平面/地形碰撞检测:)
回答这个问题会非常广泛。您应该阅读[Octree](https://en.wikipedia.org/wiki/Octree) - 另请参阅[用于高效碰撞检测的最佳算法](https:// stackoverflow。com/questions/7107231/best-algorithm-for-efficient-collision-detection-objects-objects)和[八叉树中的边界框](https://gamedev.stackexchange.com/questions/25626/bounding-boxes-in- octrees) – Rabbid76
渲染的飞机,你可以在着色器中做到这一点。我假设在对象之前渲染地形,所以一旦你试图在平面下面渲染平面片段(测试前一次传递的预存深度纹理),就会发生碰撞,因此可以将平面ID输出到某些1D纹理输出或其他任何东西。这种方式是完美的像素,甚至可以提供命中的位置。 – Spektre
为了提高我的着色器速度,我预先计算了每个顶点的高度。所以没有“深度纹理”。我也可能在从我的身高地图上阅读后更改顶点位置。 – Luecx