2

OpenGL 中的旧矩阵堆栈规定矩阵乘法顺序必须是后乘法。现代 OpenGL 将这些矩阵运算推迟到着色器,我们现在可以自由选择使用operator*(vec4,mat4)而不是operator*(mat4,vec4). 我碰巧更喜欢预乘法,因为我发现它使代码更具可读性。例如,我们有后乘法

mat4 mvp = vp * m;

而通过预乘它变成

mat4 mvp = m * vp;

这对我来说更有意义。

无论如何,我的问题是:这有什么缺点吗?OpenGL以外的人不习惯吗?性能似乎没有任何变化。

4

2 回答 2

3

OpenGL 中的旧矩阵堆栈规定矩阵乘法顺序必须是后乘法。

不,它没有。glRotate :: M = R · M假设行主矩阵和行向量,即写入所有转置的内容,固定函数矩阵堆栈与左关联乘法(例如)一样可以正常工作。实际上,从数学上讲,这使差异为零,完全相同。

性能似乎没有任何变化。

这不是关于性能的问题,而是关于便利性的问题。大多数数学家(计算机科学家、物理学家、数学家)习惯于使用列向量并从右到左阅读表达式。这是常见的符号,这就是它这样做的原因。

于 2013-06-29T23:08:55.937 回答
2

好吧,你可以做你想做的事.. 大多数人认为向量是列.. 但你可以使用行向量.. 但是,你应该计算如下:

mat4 modelView = view * model

在应用程序中。如果您要在顶点着色器中计算它.. 它会针对每个顶点进行评估。

于 2013-06-29T19:26:14.223 回答