如何将世界空间变换转换为对象空间变换?

时间:2017-03-12 13:07:09

标签: opengl unity3d matrix gl-matrix

我正在尝试实施:

transform.InverseTransformPoint(Vector3)transform.InverseTransformDirection(Vector3) 在opengl中使用glm库。 我有每个对象的视图,投影,模型矩阵。

实际上我不知道为了获得那些方法功能我必须对这个矩阵做什么。

1 个答案:

答案 0 :(得分:3)

通常,可以通过以下数学运算将局部空间中的点转换为NDC空间:

Pworld = M * Plocal;
Pview = V * Pworld;
Pndc = P * Pview;

其中M =模型,V =视图,P =投影。

因此,如果你在世界坐标系中有一个点,并希望在局部坐标系中得到它,你只需要反转第一个等式:

Plocal = inv(M) * Pworld;

这应该等同于transform.InverseTransformPoint(Vector3)(只需添加第四个坐标向量H = 1)

要实施不受比例影响的transform.InverseTransformDirection(Vector3),您必须使用以下公式:

Plocal = transpose(inverse(M)) * Pworld

其中M是原始模型的左上角3x3矩阵。要理解为什么要使用这个数学,我邀请您查看此页面:normal transformation