我已经读了很多关于“分离轴测试”的文章,从所有的帖子和文章中,我都认为它们都是二维碰撞的,而不是3D的。我听说这更像是3D空间中的“分离平面定理”,但是我不清楚在哪里可以找到这种方法与2D版本有什么不同的信息。
我应该使用SAT,因为我试图计算三角形是否与轴对齐边界盒(AABB)相交。我不需要知道交集发生在哪里,只是一个布尔结果,如果它发生了或没有发生。
我实现SAT的主要尝试位于这里:实施尝试。
如果SAT需要修改,那么需要修改什么才能成功地在3D空间中实现?据克里斯特·埃里克森从他的书“实时碰撞检测”中说,由于目前有13根轴需要测试。如果需要改变SAT,我认为会有更多的轴需要测试,因为其中涉及到第三轴。
我需要了解SAT是否需要修改,以及向何处修改和为什么修改的方向前进。如果不需要修改,我哪里出错了?谢谢!
发布于 2012-09-07 17:00:44
在阅读了许多不同的文章、文章和论文(其中最好的资源是这文章)之后,我现在知道,对于三维碰撞检测,不需要对SAT做任何修改。
虽然我的实现仍然有一些问题,但我可以说对于AABB (多维数据集),您必须测试3个曲面法线,对应于x、y和z轴。对于三角形,看起来需要4个法线,每个边一个,曲面一个(我不完全确定三角形法线,因为我还需要测试。我试了一个正常的,有80%的工作)。
对于AABB (立方体),通过得到曲面的两条垂直边和这两条边的交叉积来计算法线。
// Surface 1/3 (x, y, z - one surface for each)
Vector3d edge1 = new Vector3d();
Vector3d edge2 = new Vector3d();
Vector3d normal1 = new Vector3d();
// Get the edges, the two edges must be perpendicular to one another.
edge1.sub( point0, point1 );
edge2.sub( point0, point4 );
normal1.cross( edge1, edge2 );
normal1.normalize();
用同样的方法计算三角形曲面法线。
在此之后,SAT取AABB和三角形的投影,测试AABB轴(法线)上的投影,然后在三角形轴(法线)上重复这一点,如果其中任何一个测试检测到间隙,就不会发生碰撞。
https://stackoverflow.com/questions/12268200
复制相似问题