我正在使用 SFML 实现分离轴定理碰撞,但我的顶点数组遇到了问题。它们正在被变换(包含顶点数组的类继承 sf::Transformable),但顶点坐标不接收变换(即旋转),因此如果对象不在其原始方向,则碰撞不起作用。在计算顶点数组的 SAT 碰撞之前,我尝试使用类似这样的方法创建一个新的顶点数组
length = sqrt( shape1.getShape()[i].position.x*shape1.getShape()[i].position.x + shape1.getShape()[i].position.y*shape1.getShape()[i].position.y );
newshape1[i].position.x = length*cos( shape1.getRotation()*(PI/180) );
newshape1[i].position.y = length*sin( shape1.getRotation()*(PI/180) );
对于正在测试的两个形状。但是,这似乎不起作用。我的函数返回发生了碰撞,即使没有发生碰撞。我不确定数学是否有错误,但如果没有将 SFML 转换应用于对象,它可以完美运行。那么,我还应该做些什么,或者是否有另一种方法可以通过应用转换(几乎只是旋转)来收集 VertexArray 信息?
编辑:我在这里找到了一些信息:http:
//sfml-dev.org/documentation/2.0/classsf_1_1Transform.php#details
但我在理解如何将其应用于我的 VertexArrays 时遇到了一些麻烦。看起来我应该getTransform()
在我的班级内部做一些事情,并将其与班级的 VertexArray 结合起来。
编辑:使用上面的信息,我尝试在 SAT 计算之前在 VertexArray 的每个顶点上使用此方法:
newshape1[i].position = shape1.getTransform().transformPoint( shape1.getShape()[i].position );
在计算点积时否定变换位置后,它产生与第一次尝试完全相同的结果。