Opengl 在GLSL中对矩阵使用预乘法顺序有什么缺点吗?

Opengl 在GLSL中对矩阵使用预乘法顺序有什么缺点吗?,opengl,glsl,Opengl,Glsl,OpenGL中的旧矩阵堆栈规定矩阵乘法顺序必须是后乘法。现代OpenGL将这些矩阵操作推迟到着色器,在着色器中,我们现在可以自由选择使用操作符*(vec4,mat4)而不是操作符*(mat4,vec4)。我碰巧更喜欢预乘法,因为我发现它使代码更可读。例如,对于后乘法,我们有 mat4 mvp = vp * m; 而在预乘法中,它变为 mat4 mvp = m * vp; 这对我来说更有意义 不管怎样,我的问题是:这有什么坏处吗?除了OpenGL的人还不习惯吗?性能似乎没有任何变化。好吧,你可

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

mat4 mvp = vp * m;
而在预乘法中,它变为

mat4 mvp = m * vp;
这对我来说更有意义


不管怎样,我的问题是:这有什么坏处吗?除了OpenGL的人还不习惯吗?性能似乎没有任何变化。

好吧,你可以随心所欲。。大多数人认为向量是列。。但是可以使用行向量。。但是,您应该计算如下内容:

mat4 modelView = view * model
在应用程序中。如果要在顶点着色器中计算它。。将对每个顶点进行求值

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

没有。固定函数矩阵堆栈与左联想乘法(例如,
glRotate::M=R·M
)在假定行主矩阵和行向量的情况下工作得一样好,即写入所有转置的内容。事实上,从数学上讲,这是零差,这是完全一样的

性能似乎没有任何变化


这不是性能问题,而是方便性问题。大多数数学爱好者(计算机科学家、物理学家、数学家)都习惯于使用列向量并从右向左读取表达式。这是一种常用的表示法,这就是为什么它是这样做的。

原则上,GLSL编译器似乎可以在两个统一(非常类似于两个常量)之间找到算法,并进行优化,以便在着色处理器之外完成这项工作?很可能你是对的。我认为依赖编译器是好的:)但是我不能完全消除怀疑。