gpt4 book ai didi

c++ - 在 SFML 中获取绝对顶点坐标?

转载 作者:太空狗 更新时间:2023-10-29 21:45:32 25 4
gpt4 key购买 nike

我正在使用 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 );

在计算点积时取反变换位置后,产生与第一次尝试完全相同的结果。

最佳答案

我意识到这是一个将近 3 年的问题,但这个问题已经让我抓狂了大约一个星期,我终于设法解决了它。这是对我有用的:

sf::Vector2f vertexPosition = getTransform().transformPoint( m_vertices[n].position );

...尽管查看了对我有用的方法以及您尝试的方法,但老实说,我不确定您的方法为何不成功。我看到的唯一区别是 (1) 我从我的自定义形状中调用此函数,这应该没有任何区别,以及 (2) 您使用的是 GetShape(),我猜这是一个函数你写的是返回局部顶点位置?

无论如何,我希望这对将来可能会遇到此问题的人有所帮助。我上面写的代码片段返回任何自定义形状的顶点的绝对坐标,并应用任何变换(平移、缩放和旋转)。

关于c++ - 在 SFML 中获取绝对顶点坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com