我一直在寻找C ++中的地形碰撞的例子,但我没有找到任何东西。我发现了一个使用.RAW文件的例子,它位于toymaker.info中,所以不要提及它 如何检测对象可以对应每个三角形的地形之间的碰撞。我知道它会很慢。如何检测terrain和.X文件之间的冲突?
答案 0 :(得分:2)
这是一种方法:
从原点到想要测试碰撞的球体中心画一条直线。现在使用刚刚创建的直线或光线进行光线三角形交叉。您现在知道光线是否已通过三角形。如果它已经通过三角形,那么得到它与三角形相交的点并与球体的中心进行简单的距离检查。如果距离大于球体的半径,则不会发生碰撞。如果它小于那么球体与三角形相交。
还值得检查球体中心所在三角形的哪一侧。这是三角形面法线与球体中心之间的简单点积。值为0表示球体的中心位于三角形中,阳性结果表示其一侧为负,另一侧为负。
您也可以在一段时间内执行此计算。因此,如果你知道你正在模拟一秒并且你知道球体移动的速度,那么你可以计算球体与三角形相交的那一秒的点。这很容易计算。如果在开始时球体距离三角形是4个单位,并且在一秒之后它通过三角形是1个单位。所以在1秒内它已经旅行了5个单位。因此,交叉点必须在运动中发生0.8秒。通过这种方式,您可以对粒子的碰撞作出反应,即使它们行进得太快,否则它们会直接穿过它们碰撞的物品。
答案 1 :(得分:1)
如果.X文件表示DirectX格式文件,请使用DirectX Library加载.X网格。还提供了碰撞方法,如D3DXIntersect。
其他信息:http://msdn.microsoft.com/en-us/library/windows/desktop/bb172882(v=vs.85).aspx