opengl矩阵乘法

Posted

技术标签:

【中文标题】opengl矩阵乘法【英文标题】:opengl matrix multiplication 【发布时间】:2012-04-27 01:50:02 【问题描述】:

如果我在 C 的 OpenGL 中有一个当前矩阵,我应用以下代码:

   glMultMatrixf(M);
   glMultMatrixf(M2);

当前变换矩阵是什么样的?在红皮书中,它指出使用 glMultMatrix*(M) 可以做到这一点:CM。但是,执行上述操作也会导致这种情况发生:M(M2v),其中 M2 在 M 之前应用。在这种情况下,M 将是左操作数,但在前 M 是右操作数。

【问题讨论】:

【参考方案1】:

如果你这样做了;

glLoadIdentity();
glMultMatrixf(M1);
glMultMatrixf(M2);
glMultMatrixf(M3);

那么得到的矩阵就是M = M1 * M2 * M3;

如果你将一个顶点 v 应用到它上面,它会像这样相乘:v' = M*v = M1*M2*M3*v

不过我不太明白你的困惑,你指的“以前的案例”是什么?

【讨论】:

发布问题的 OP 听起来他在数学约定和计算机科学矩阵计算之间有些混淆。 所以我假设 M3*v 在 M2 相乘之前发生。我不明白为什么红皮书指出 MultMatrix*f(M) 将当前矩阵 C 乘以 M (CM),而在您的解释中,每次应用矩阵乘法时,它都作为左操作数应用,而不是右操作数, 如 (CM) @SamAdams:它应用于右侧。它应用于所有 previous 矩阵的右侧。当前矩阵,由所有先前的矩阵命令建立起来,乘以给定的矩阵,给定的矩阵在右边。 所以 M1*M2 发生,然后是 * M3 的结果?我认为它的顺序相反,所以 M2 * M3 发生在 M1 * M2*M3 的结果之前? @SamAdams:矩阵乘法是关联的。因此,您可以随意更改 M1*M2*M3 的分组(而不是 order)。您可以将其视为 M1*(M2*M3) 或 (M1*M2)*M3。无论哪种方式都会产生完全相同的矩阵。

以上是关于opengl矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

围绕对象旋转的矩阵乘法opengl

OpenGL中矩阵乘法的顺序

Opengl相机和乘法矩阵

3D 空间中的 OpenGL 2D 文本 [C++/GLM] 矩阵乘法

自定义顶点处理器不起作用 - 矩阵乘法错误或其他啥?

如何将 glRotatef() 转换为 glMultMatrixd() 的乘法矩阵