Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何得到modelview矩阵的逆矩阵?_Opengl_Matrix Inverse - Fatal编程技术网

Opengl 如何得到modelview矩阵的逆矩阵?

Opengl 如何得到modelview矩阵的逆矩阵?,opengl,matrix-inverse,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]; 如何获得反向变换的模型视图矩阵的逆 嗯,呃,通过反转矩阵。这是一个标准的数学过程,你可以在每一本线性代数教科书

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

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

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

嗯,呃,通过反转矩阵。这是一个标准的数学过程,你可以在每一本线性代数教科书上找到。所有矩阵数学库都有一个函数用于反转矩阵。OpenGL不是一个矩阵数学库,所以它没有一个函数。看看GLM、Eigen或linmath.h之类的库,嗯,通过反转矩阵。这是一个标准的数学过程,你可以在每一本线性代数教科书上找到。所有矩阵数学库都有一个函数用于反转矩阵。OpenGL不是一个矩阵数学库,所以它没有一个函数。看看GLM、Eigen或linmath.h之类的库,嗯,通过反转矩阵。这是一个标准的数学过程,你可以在每一本线性代数教科书上找到。所有矩阵数学库都有一个函数用于反转矩阵。OpenGL不是一个矩阵数学库,所以它没有一个函数。看看GLM、Eigen或linmath.h之类的库,嗯,通过反转矩阵。这是一个标准的数学过程,你可以在每一本线性代数教科书上找到。所有矩阵数学库都有一个函数用于反转矩阵。OpenGL不是一个矩阵数学库,所以它没有一个函数。看看GLM、Eigen或linmath.h之类的库,您发布的代码中的内容不是应用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已经建议的那样。如果你能对矩阵做出某些假设,就会有更简单、更有效的方法。典型的情况是,您知道变换矩阵仅由旋转、平移和缩放组成。在这种情况下,您可以将矩阵拆分为这些组件,将每个组件倒置,然后将它们重新组装到倒置的矩阵中。由于旋转、平移和缩放都很容易反转,这可以通过非常简单的数学来完成。

您发布的代码中的内容不是应用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已经建议的那样。如果你能对矩阵做出某些假设,就会有更简单、更有效的方法。典型的情况是,您知道变换矩阵仅由旋转、平移和缩放组成。在这种情况下,您可以将矩阵拆分为这些组件,将每个组件倒置,然后将它们重新组装到倒置的矩阵中。由于旋转、平移和缩放都很容易反转,这可以通过非常简单的数学来完成。

您发布的代码中的内容不是应用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已经建议的那样。如果你能对矩阵做出某些假设,就会有更简单、更有效的方法。典型的情况是,您知道变换矩阵仅由旋转、平移和缩放组成。在这种情况下,您可以将矩阵拆分为这些组件,将每个组件倒置,然后将它们重新组装到倒置的矩阵中。由于旋转、平移和缩放都很容易反转,这可以通过非常简单的数学来完成。

您发布的代码中的内容不是应用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已经建议的那样。如果你能对矩阵做出某些假设,就会有更简单、更有效的方法。典型的情况是,您知道变换矩阵仅由旋转、平移和缩放组成。在这种情况下,您可以将矩阵拆分为这些组件,将每个组件倒置,然后将它们重新组装到倒置的矩阵中。由于旋转、平移和缩放都是很容易反转的,这可以通过非常简单的数学来完成。

如果没有得到正确的反转矩阵,它就不起作用了?或者你在用它做某事时没有得到想要的结果?如果你写了一个反演算法,或者从某处得到了一个反演算法,我会一直独立测试它。向它提供几个矩阵示例,并通过检查两个矩阵的乘积是否生成单位矩阵来验证它是否生成了正确的逆。@ShashiMishra:OpenGL(和大多数其他图形库)对矩阵进行排序的方式可能会使您感到不适:它们通常按列主顺序排列,即从第一列开始排列元素,然后从第二个元素开始,依此类推。然而,大多数人天真地假设行的主顺序,这会转换所有内容并反转操作顺序。在没有得到正确的倒矩阵的意义上,它不起作用?或者你在用它做某事时没有得到想要的结果?如果你写了一个反演算法,或者从某处得到了一个反演算法,我会一直独立测试它。向它提供几个矩阵示例,并通过检查两个矩阵的乘积是否生成单位矩阵来验证它是否生成了正确的逆。@ShashiMishra:OpenGL(和大多数其他图形库)对矩阵进行排序的方式可能会使您感到不适:它们通常按列主顺序排列,即从第一列开始排列元素,然后从第二个元素开始,依此类推。然而大多数人都很天真