我通过将它与模型视图矩阵相乘来转换矢量。
glGetDoublev( GL_MODELVIEW_MATRIX, cam );
newX=cam[0]*tx+cam[1]*ty+cam[2]*tz+cam[3];
newY=cam[4]*tx+cam[5]*ty+cam[6]*tz+cam[7];
newZ=cam[8]*tx+cam[9]*ty+cam[10]*tz+cam[11];
如何获得逆向变换的模型视图矩阵的逆?
答案 0 :(得分:2)
您发布的代码中包含的内容不是应用MODELVIEW矩阵的正确方法。 OpenGL使用列主要顺序表示矩阵。您的计算需要如下所示:
newX=cam[0]*tx+cam[4]*ty+cam[8]*tz+cam[12];
newY=cam[1]*tx+cam[5]*ty+cam[9]*tz+cam[13];
newZ=cam[2]*tx+cam[6]*ty+cam[10]*tz+cam[14];
对于倒置矩阵,您可以使用通用矩阵求逆算法,正如@datenwolf已经建议的那样。如果您可以对矩阵做出某些假设,那么有更简单,更有效的方法。一个典型的例子是您知道您的变换矩阵仅由旋转,平移和缩放组成。在这种情况下,您可以将矩阵分成这些组件,将每个组件反转,然后将它们重新组合成倒置矩阵。由于旋转,平移和缩放都很容易被反转,因此可以通过非常简单的数学运算来完成。
答案 1 :(得分:1)