【发布时间】:2013-06-29 07:15:13
【问题描述】:
我正在使用 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 );
在计算点积时对变换位置求反后,得到的结果与第一次尝试完全相同。
【问题讨论】: