如何得到模型视图矩阵的逆?

时间:2014-04-20 18:17:09

标签: opengl matrix-inverse

我通过将它与模型视图矩阵相乘来转换矢量。

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];

如何获得逆向变换的模型视图矩阵的逆?

2 个答案:

答案 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)

嗯,呃,通过反转矩阵。它是一个标准的数学程序,你可以在线性代数的每本教科书中找到它。所有矩阵数学库都具有反转矩阵的功能。 OpenGL不是矩阵数学库,因此它没有函数。查看GLM,Eigen或linmath.h等库。