通过TRS矩阵乘以向量似乎不起作用

时间:2016-08-26 14:07:39

标签: c# matrix unity3d vector

Unity 3D 5.4允许创建Matrix4x4,通过Matrix4x4.SetTRS设置其TRS值,并将该点乘以该矩阵以应用转换。我希望以下代码打印出翻译的点,但翻译似乎没有发生。

m = Matrix4x4.identity;
m.SetTRS(new Vector3(-10f, 4f, 0f), Quaternion.Euler(new Vector3(0f, 0f, 0f)), Vector3.one);

Vector3 P = new Vector3(10f, 1f, 0f);

Debug.Log("P': " + m * P);

代码打印出来

P': (10.0, 1.0, 0.0, 0.0)

而不是

P': (0.0, 5.0, 0.0, 0.0)

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

要使用Vector3转换Matrix4x4点,您需要使用Matrix4x4.MultiplyPoint()Matrix4x4.MultiplyPoint3x4()。所以在你的情况下,我会尝试:

Debug.Log("P': " + m.MultiplyPoint3x4(P));

此外,作为提示 - Quaternion表示没有轮换可以由Quaternion.identity表示,因此您无需为此保持Quaternion.Euler()的调用(如果这是您的意图)。

希望这有帮助!如果您有任何问题,请告诉我。