Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 四边形与OpenGL的碰撞检测_C++_Opengl_Collision Detection - Fatal编程技术网

C++ 四边形与OpenGL的碰撞检测

C++ 四边形与OpenGL的碰撞检测,c++,opengl,collision-detection,C++,Opengl,Collision Detection,我正在制作一个简单的3D OpenGL游戏。目前,我有四个边界墙,一个随机分布的内墙和一个简单的四方立方体为我的球员 我想在播放器和所有墙壁之间设置碰撞检测。这对于边界墙来说很容易,因为我可以检查x或z坐标是否小于或大于某个值。问题在于内墙。我有一个glGenList,它保存小的矩形墙段,在初始设置时,我随机生成一个x,z坐标数组,并将这些墙段转换到绘图场景中的这个位置。我还添加了旋转角度,45或90,这使碰撞检测复杂化 有人能帮我检测一下这里的碰撞吗。我有每个墙段的坐标,每个墙段的大小,还有球

我正在制作一个简单的3D OpenGL游戏。目前,我有四个边界墙,一个随机分布的内墙和一个简单的四方立方体为我的球员

我想在播放器和所有墙壁之间设置碰撞检测。这对于边界墙来说很容易,因为我可以检查x或z坐标是否小于或大于某个值。问题在于内墙。我有一个glGenList,它保存小的矩形墙段,在初始设置时,我随机生成一个x,z坐标数组,并将这些墙段转换到绘图场景中的这个位置。我还添加了旋转角度,45或90,这使碰撞检测复杂化

有人能帮我检测一下这里的碰撞吗。我有每个墙段的坐标,每个墙段的大小,还有球员的坐标


我会在玩家和墙壁周围看一个有边界的盒子,还是有更好的选择?

我想你的问题主要是检测与墙壁的碰撞角度,这与“检测点是否与直线匹配”基本相同,这里有一个关于你如何做的答案:

(代码可能是C#,但其背后的数学适用于任何语言)。您只需在这些公式中为Z替换Y,因为Y似乎不是当前设计中的一个因素

关于如何进行“良好”的碰撞检测,已经有很多文章甚至书籍发表。当然,部分原因可以归结为“您想要非常精确还是非常快速的代码”——对于“完美”的模拟,您可能会牺牲速度来换取精确性。在大多数游戏中,大多数玩家的身体只是稍微“凹陷”了一面墙,因为玩家已经通过了墙的交叉点,这也许是可以接受的

“划分空间”也很有用。常见的方法是“二进制空间分区”,这里对其进行了很好的描述和说明:


关于游戏编程的书籍应该涵盖碰撞检测的基本原理。网络上也有很多关于它的文章,包括维基百科上的一个条目:

除了制作刚体物理引擎,还可以使用点到平面的距离来查看立方体的角点与平面之间的距离是否小于0.0f(我会使用FLT_MIN,这样点就有一点半径)。您需要存储一个规格化的三维矢量(长度为1.0f的矢量)来表示平面的法线。如果从平面中心到点的向量与普通法线之间的点积小于半径,则发生碰撞。在那之后,你可以取立方体的速度(向量的长度),乘以0.7f来吸收一些能量,并将其存储为立方体的新速度。然后在平面法线上反射立方体的归一化速度向量,然后将其乘以先前计算的立方体新速度


如果你真的想进入游戏物理领域,那就从中吸取教训吧。我用他的书上了一堂游戏物理课。书中有一些错误,所以一定要从github获取所有代码示例。他制作了一台质量聚合物理引擎和一台刚体引擎。我还将复习矩阵和张量。

glGenLists
?2013年(几乎2014年)的显示列表?老兄,这些东西早就不受欢迎了。不要使用它们。我会看看你的建议,我只是在寻找基本的碰撞检测,在这个阶段我不需要考虑任何反作用力,复杂性也不需要使用任何物理引擎。在这种情况下,只需要使用点对面碰撞。此链接底部有一个代码示例。我会看看这对我有什么好处。如果不能做到这一点,墙就没有必要倾斜,而且我相信直边墙会容易得多。我从来没有听说过在3D世界中使用二进制空间分割。通常在2D游戏中,我看到了四叉树,在3D世界中看到了八叉树。