如何在WebGL中找到当前输出像素的裁剪空间坐标位置?

4

因此,在我的顶点着色器中,我正在执行类似于以下的操作:

void main() {
  gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);
}

现在我在我的片段着色器中,我想要访问该位置,也就是说,我正在寻找一个变量来获取当前像素的位置,但是以裁剪空间坐标表示。这是因为我希望将该像素与纹理中相同位置的像素混合。

看起来gl_FragCoord与我想要的类似,但它以窗口空间表示。我认为我可以这样转换:

vec2 what_i_want = vec2(gl_FragCoord.x / 1920., gl_FragCoord.y / 1080.);

但是我需要知道我的画布大小。我可以将画布大小作为一个统一变量传递,但这似乎有点过度了。难道没有办法在片段着色器中直接访问这个值吗?

1个回答

3

你走在正确的道路上。你必须在一个统一变量中设置视口(画布)的大小。没有其他选择。这就是每个人在WebGL和OpenGL中都做的事情。

uniform vec2 u_resolution;

void main()
{
    vec2 uv = gl_FragCoord.xy / u_resolution;

    // [...]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接