OpenGL着色器(GLSL)是否有“最佳实践”矩阵约定

时间:2018-12-17 19:15:42

标签: opengl shader vertex-shader

因此“ 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通常是标识或只是旋转,因此即使矩阵数学的排序不正确,它们也可以工作。

我的问题是,是否存在“适当”或“最广泛接受”的约定?

在着色器库变得越来越普遍的世界中,我想坚持我们系统中的“最佳”方式。

0 个答案:

没有答案