如何将世界 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
我正在努力实现:
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