优化 GLSL 中的 2D 模型视图转换

发布于 2024-10-27 17:11:03 字数 463 浏览 1 评论 0原文

因此,转换顶点然后传递到 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天白云 2024-11-03 17:11:03

我认为图形硬件使用 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

清风疏影 2024-11-03 17:11:03

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

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文