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矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章