Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区?_3d_Opengl Es 2.0_Depth Buffer - Fatal编程技术网

3d 如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区?

3d 如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区?,3d,opengl-es-2.0,depth-buffer,3d,Opengl Es 2.0,Depth Buffer,我想在OpenGL ES 2.0中渲染具有轮廓后处理效果的场景 首先,我渲染所有不透明对象。然后,我使用后处理着色器进行轮廓检测,该着色器使用深度缓冲区作为纹理。现在我想使用alpha混合渲染所有对象,不写入深度缓冲区,而是使用深度测试和用于轮廓检测的深度缓冲区纹理的值 如果我在后处理之前渲染半透明对象,则后处理会渲染不透明对象的轮廓,因为它们不会写入深度缓冲区 如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区 谢谢您查看分机。有了这个你可以 // generate and bind a

我想在OpenGL ES 2.0中渲染具有轮廓后处理效果的场景

首先,我渲染所有不透明对象。然后,我使用后处理着色器进行轮廓检测,该着色器使用深度缓冲区作为纹理。现在我想使用alpha混合渲染所有对象,不写入深度缓冲区,而是使用深度测试和用于轮廓检测的深度缓冲区纹理的值

如果我在后处理之前渲染半透明对象,则后处理会渲染不透明对象的轮廓,因为它们不会写入深度缓冲区

如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区

谢谢您查看分机。有了这个你可以

// generate and bind a new Framebuffer object
glGenFramebuffers( ... );
glBindFramebuffer( ... );

// create a depth texture
glTexImage2D(...,  GL_DEPTH_COMPONENT, ...);

// and attach it to the Framebuffer with     
glFramebufferTexture2D(..., GL_DEPTH_ATTACHMENT, ...);
没有OpenGL扩展,就没有完美的解决方案。可以将深度值写入颜色缓冲区,但精度有限

为遭受相同问题的WebGL解决相同问题。
在第12章中介绍帧缓冲区对象和渲染缓冲区对象,包括扩展。

onDrawFrame(){

片段着色器

            ////attach texture for SSAO
            GLES20.glActiveTexture(GLES30.GL_TEXTURE2);
            GLES20.glBindTexture(GLES30.GL_TEXTURE_2D, TextureXYZ);
            GLES20.glUniform1i(rs.u_textureXYZ, 2);
            GLES20.glActiveTexture(GLES30.GL_TEXTURE3);
            GLES20.glBindTexture(GLES30.GL_TEXTURE_2D, TextureAO_Norm);//нормали
            GLES20.glUniform1i(rs.u_textureAO_norm, 3);
            GLES20.glActiveTexture(GLES30.GL_TEXTURE4);
            GLES20.glBindTexture(GLES30.GL_TEXTURE_2D, Texture_depth);//Depth
            GLES20.glUniform1i(rs.u_textureDepth, 4);
uniform sampler2D u_textureXYZ;
uniform sampler2D u_textureAO_norm;
uniform sampler2D u_textureDepth;