在GLSL中使用矩阵的预乘法顺序是否有任何缺点?

时间:2013-06-29 19:01:27

标签: opengl glsl

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

mat4 mvp = vp * m;

与预乘相同,它变为

mat4 mvp = m * vp;

对我来说更有意义。

无论如何,我的问题是:这有什么缺点吗?除了OpenGL之外的人还没有习惯呢?表现似乎没有任何变化。

2 个答案:

答案 0 :(得分:3)

  

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

不,它没有。假设行主矩阵和行向量,即写入所有转置的内容,固定函数矩阵栈在左关联乘法(例如glRotate :: M = R · M)下也能正常工作。事实上,这在数学上是零差异,它完全相同。

  

似乎没有任何性能变化。

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

答案 1 :(得分:2)

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

mat4 modelView = view * model

在申请中。如果您要在顶点着色器中计算它,则会为每个顶点计算它。