我正在尝试实施:
transform.InverseTransformPoint(Vector3) 和 transform.InverseTransformDirection(Vector3) 在opengl中使用glm库。 我有每个对象的视图,投影,模型矩阵。
实际上我不知道为了获得那些方法功能我必须对这个矩阵做什么。
答案 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