UE4中简单坐标转换的不正确结果

时间:2018-12-21 15:40:54

标签: c++ graphics transform linear-algebra unreal-engine4

我有一个简单的例子:

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提交了一个错误,并得到了答复:

  

你好

     

感谢您提交错误报告,但是,我们目前认为您所描述的问题实际上不是虚幻引擎的错误,因此我们无法对此采取任何进一步的措施。

Here is UE4 forum thread.

此行为正确吗?

是不是bug?

1 个答案:

答案 0 :(得分:1)

实际上,似乎无法解决(无重大更改)。

FTransform已分解变形(平移,旋转和缩放)。应用它的顺序是缩放,旋转和平移。

但是必须以相反的顺序应用反向变换-反向平移,旋转和缩放。

但是,它是同一类,并且没有有关应用程序顺序的任何信息。

在统一比例下可以正常工作,但对于不均匀比例则不正确。如果您使用的是非均匀类型,则必须使用FMatrix。