我有一个简单的例子:
FVector TransformTest()
{
FVector translation;
{
translation.X = 0.0f;
translation.Y = 20.0f;
translation.Z = 0.0f;
}
FRotator rotation;
{
rotation.Roll = 0.0f;
rotation.Pitch = 0.0f;
rotation.Yaw = 45.0f;
}
FVector scale;
{
scale.X = 2.0f;
scale.Y = 1.0f;
scale.Z = 1.0f;
}
FTransform test_transform = FTransform(rotation, translation, scale);
return (test_transform.Inverse() * test_transform).GetTranslation();
}
此函数将返回向量:
[X = -10.0,Y = -10.0,Z = 0.0] 。
预期:
[X = 0.0,Y = 0.0,Z = 0.0] 。
我正在进行转换,例如,先从 LocalToWorld 然后 WorldToLocal (准确性不高),但是我在远离源头的陌生空间中完成了自己的工作。
我认为我已经向Epic提交了一个错误,并得到了答复:
你好
感谢您提交错误报告,但是,我们目前认为您所描述的问题实际上不是虚幻引擎的错误,因此我们无法对此采取任何进一步的措施。
此行为正确吗?
是不是bug?
答案 0 :(得分:1)
实际上,似乎无法解决(无重大更改)。
FTransform
已分解变形(平移,旋转和缩放)。应用它的顺序是缩放,旋转和平移。
但是必须以相反的顺序应用反向变换-反向平移,旋转和缩放。
但是,它是同一类,并且没有有关应用程序顺序的任何信息。
在统一比例下可以正常工作,但对于不均匀比例则不正确。如果您使用的是非均匀类型,则必须使用FMatrix。