通常,您会看到这样的 OpenGL 着色器计算结构:
gl_Position=ProjectionMatrix * ModelViewMatrix * positionVector
那是,matrix*matrix*vector
在这个问题中发现,矩阵链的计算效率是完全可控的,实际上从向量开始计算效率更高。
现在,如上所述的典型着色器计算假定列优先排序,因为向量在右侧。我想知道的是OpenGL实际上是如何执行上述计算的?在以列为主的系统中,计算的顺序(不是符号)matrix*matrix*vector
是vector*matrix*matrix
因为它从右到左流动。
令人困惑的是,与任何编程代码一样,着色器代码是从左到右编写的,并且假定了标准的数学运算顺序。因此,这意味着着色器最后计算向量,因此执行效率低下。