OpenGL中的旧矩阵堆栈规定矩阵乘法顺序必须是后乘法。现代OpenGL将这些矩阵操作推迟到着色器,我们现在可以自由选择使用operator*(vec4,mat4)
而不是operator*(mat4,vec4)
。我碰巧更喜欢预乘,因为我发现它使代码更具可读性。例如。通过后乘法我们有
mat4 mvp = vp * m;
与预乘相同,它变为
mat4 mvp = m * vp;
对我来说更有意义。
无论如何,我的问题是:这有什么缺点吗?除了OpenGL之外的人还没有习惯呢?表现似乎没有任何变化。
答案 0 :(得分:3)
OpenGL中的旧矩阵堆栈规定矩阵乘法顺序必须是后乘法。
不,它没有。假设行主矩阵和行向量,即写入所有转置的内容,固定函数矩阵栈在左关联乘法(例如glRotate :: M = R · M
)下也能正常工作。事实上,这在数学上是零差异,它完全相同。
似乎没有任何性能变化。
这不是关于表现的问题,而是方便。大多数数学民间(计算机科学家,物理学家,数学家)习惯使用列向量并从右到左阅读表达式。这是常见的符号,这就是为什么它这样做的原因。
答案 1 :(得分:2)
嗯,你可以做你想做的事。大多数人都认为向量是列..但你可以使用行向量..但是,你应该计算如下:
mat4 modelView = view * model
在申请中。如果您要在顶点着色器中计算它,则会为每个顶点计算它。