我正在尝试实施:
transform.InverseTransformPoint(Vector3) 和 transform.InverseTransformDirection(Vector3) 使用 opengl 中的 glm 库。我有每个对象的视图、投影、模型矩阵。
实际上我不知道我必须用这个矩阵做什么才能得到那个方法的功能。
我正在尝试实施:
transform.InverseTransformPoint(Vector3) 和 transform.InverseTransformDirection(Vector3) 使用 opengl 中的 glm 库。我有每个对象的视图、投影、模型矩阵。
实际上我不知道我必须用这个矩阵做什么才能得到那个方法的功能。
通常,可以通过以下数学运算将局部空间中的一个点转换为 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 矩阵。为了理解你为什么要使用这个数学,我邀请你看看这个页面:正常转换