在WebGL中使用gl_FragDepth

5
我正在编写一个WebGL 3D应用程序,需要提供包含在纹理中的自己的深度数据。我的当前代码如下:
顶点着色器:
    varying vec2 vUv;

    void main() {
        vUv = uv;
    }

FS:
    uniform sampler2D depthTex;

    varying vec2 vUv;

    void main() {
        gl_FragDepth = texture2D(depthTex, vUv).r;
    }

然而,在OpenGL-ES(因此也在WebGL)中,gl_FragDepth被禁用了,有没有任何方法可以启用它,或者提供自己的深度数据,而不涉及渲染目标的大量操作?

看一下这个:https://dev59.com/KoDba4cB1Zd3GeqPEG9f - Dragan Okanovic
2个回答

5

EXT_frag_depth扩展可以启用gl_FragDepthEXT的使用。您可以在此处检查您的浏览器是否支持它。目前只有Firefox支持。

可以使用以下方式加载该扩展:

gl.getExtension("EXT_frag_depth");

您可以通过编程方式检查其是否可用

gl.getSupportedExtensions().indexOf("EXT_frag_depth") >= 0

1

WebGL2支持gl_FragDepth作为核心功能,因此之前提到的EXT_frag_depth扩展已不再适用于WebGL2。


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