为什么大多数着色器使用mat4而不是mat3x4?

时间:2016-05-03 02:44:17

标签: opengl glsl

看起来任何操作都不能使底行成为其他内容然后[0 0 0 1],并且顶点位置带有vec3,需要在变换之前升级到vec4。然而,我经常看到着色器使用mat4进行投影/视图/模型世界。考虑到这一点,为什么标准使用mat4而不是mat3x4?我们可以节省传输16个字节和1/4的mat4xvec4乘法。

1 个答案:

答案 0 :(得分:3)

例如,透视投影变换的底行为[0 0 -1 0],它影响顶点的 w 坐标。因此,如果您使用vec3来表示着色器中的顶点,OpenGL(以及几乎所有其他渲染API)将在应用您的 w 坐标后自动插入值1.0 mat3x4转换,可以有效地禁用透视划分步骤(即,当图形系统划分每个 x y 时, z 坐标 w ),这是让对象看起来更小的魔力,因为它们远离眼睛。

一般来说,每次统一更新节省16个字节(这是您更新投影变换矩阵所做的,并且每个着色器程序绑定可能会发生一次)与优化顶点属性或纹理上传相比没有什么,或几乎任何与图形有关的东西。