优化 GLSL 中的 2D 模型视图转换
因此,转换顶点然后传递到 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 个元素。我可以做得更好吗?
So, the standard way to transform vertices and then pass to the fragment shader in GLSL is something like this:
uniform mat4 u_modelview;
attribute vec4 a_position;
void main() {
gl_Position = u_modelview * a_position;
}
However, I am working in 2D so there is redundancy in the 4x4 matrix. Would it be more efficient for me to do this?
uniform mat3 u_modelview;
attribute vec3 a_position;
void main() {
gl_Position = vec4(u_modelview * a_position, 1.0);
}
gl_Position requires a 4 component vector so an extra operation is required at output. However the matrix multiplication is for 9 elements instead of 16. Can I do any better?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为图形硬件使用 3x3 和 4x4 矩阵进行转换的时间相同。您在变换顶点的过程中是否有经过验证的瓶颈?通常减速出现在片段着色器上,而不是顶点上
I think that graphics hardware transforms with 3x3 and 4x4 matrices for the same amount of time. Do you have a proven bottleneck at the process of transforming vertices? Usually slowdown appears at the fragment shader, not the vertex
这取决于。如果每个顶点都有复杂的信息并且这对您来说是一个瓶颈,那么如果减少每个顶点的数据,您应该会看到速度有所提高。
最好的办法是设置一个测试并以两种方式进行测量。
It depends. If you have complex information per-vertex and it's a bottleneck for you, then if you decrease the per-vertex data you should see some speed increase.
The best thing is to set up a test and measure it both ways.