2016-05-03 91 views
1

它看起来不像任何操作可以使底部行其他[0 0 0 1]和顶点位置来与vec3需要升级到vec4之前变换。然而,我经常看到使用mat4进行投影/视图/ modeltoworld的着色器。考虑到,为什么标准使用mat4而不是mat3x4?我们可以保存16个字节和一个mat4xvec4乘法的1/4的传输。为什么大多数着色器使用mat4而不是mat3x4?

+1

你在说什么仍然需要一个vec4(你需要W = 1),并且所讨论的矩阵需要是mat4x3(4列,3行)。否则,位置翻译不起作用。 –

回答

3

例如,透视投影变换具有底部行[0 0 -1 0],其影响顶点的坐标。因此,如果您使用vec3来表示着色器中的顶点,那么在应用mat3x4转换之后,OpenGL(以及几乎所有其他呈现API)将自动为坐标值插入1.0值,这将有效地禁用透视分割步骤(即,当图形系统将每个Xÿ,和ž通过坐标瓦特),其是允许对象似乎更小,因为它们从眼睛得到更远的魔法。

一般而言,每次统一更新(这是您要做的更新投影转换矩阵,并且每个着色器程序绑定可能会发生一次)保存16个字节与优化顶点属性或纹理上传几乎任何其他图形相关。

+0

是的,我没有'想推动性能方面更多的逻辑方面。是的,你是对的,虽然我刚刚在我使用的图书馆中找到了光明的一面 – user2475269

相关问题