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

how to convert world space transform to object space transform?

我正在努力实现:

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

实际上我不知道我必须用这个矩阵做什么才能获得那个方法的功能。

通常,局部 space 中的一个点可以通过以下数学运算转换为 NDC space:

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