4

因此,在 GLSL 中转换顶点然后传递给片段着色器的标准方法是这样的:

uniform mat4 u_modelview;
attribute vec4 a_position;

void main() {
    gl_Position = u_modelview * a_position;
}

但是,我在 2D 中工作,因此 4x4 矩阵中存在冗余。我这样做会更有效率吗?

uniform mat3 u_modelview;
attribute vec3 a_position;

void main() {
    gl_Position = vec4(u_modelview * a_position, 1.0);
}

gl_Position 需要一个 4 分量向量,因此在输出时需要额外的操作。但是矩阵乘法是针对 9 个元素而不是 16 个元素。我可以做得更好吗?

4

2 回答 2

4

我认为图形硬件在相同的时间内使用 3x3 和 4x4 矩阵进行转换。您在转换顶点的过程中是否存在已证实的瓶颈?通常减速出现在片段着色器,而不是顶点

于 2011-03-27T14:39:33.887 回答
1

这取决于。如果您每个顶点都有复杂的信息并且它对您来说是一个瓶颈,那么如果您减少每个顶点的数据,您应该会看到速度有所提高。

最好的办法是设置一个测试并以两种方式测量它。

于 2011-03-27T14:36:25.623 回答