【问题标题】:Why do most shader use mat4 instead of mat3x4?为什么大多数着色器使用 mat4 而不是 mat3x4?
【发布时间】:2016-08-27 22:39:47
【问题描述】:

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

【问题讨论】:

  • 您所说的仍然需要 vec4(您需要 W=1),并且有问题的矩阵需要是 mat4x3(4 列,3 行)。否则,位置转换将不起作用。

标签: opengl glsl


【解决方案1】:

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

一般来说,每次统一更新节省 16 个字节(这是您更新投影变换矩阵所要做的,并且可能每个着色器程序绑定发生一次)与优化顶点属性或纹理上传相比,或者实际上其他任何与图形相关的内容。

【讨论】:

  • 是的,我不想将性能方面更多地推向逻辑方面。是的,你是对的,虽然我刚刚在我正在使用的图书馆中找到了光明的一面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2013-12-28
相关资源
最近更新 更多