因此“ column major”和“ row major”矩阵表示法约定之间存在差异,每个人似乎都说“选择您喜欢的那个”。 OpenGL似乎希望它的输入矩阵在内存中表示为“ column major”,并且预乘和后乘之间有区别。
因此,在典型的3d图形系统中,您需要进行以下转换:
modelSourceVertex-> ModelToWorld-> WorldToEye(Camera)-> CameraToClip(投影到2x2x2立方体)-> ClipToPixels(到由“视口”设置的GL内部的像素设备空间中的2d顶点)
人们倾向于预先计算那些变化不大的序列,即:要优化的WorldToClip。
我在着色器中看到了很多东西。
mat4 MVP = Model * Projection;
gl_Position = modelPosition * MVP;
# **********
gl_position = Projection * Model * modelPosition;
# **********
mat4 MVP = ModelMatrix * ViewMatrix * ProjectionMatrix;
gl_Position = modelPosition * MVP;
# **********
etc
许多“众包”样本似乎都是幼稚的,并且ModelToWorld和WorldToEye通常是标识或只是旋转,因此即使矩阵数学的排序不正确,它们也可以工作。
我的问题是,是否存在“适当”或“最广泛接受”的约定?
在着色器库变得越来越普遍的世界中,我想坚持我们系统中的“最佳”方式。