3d 如何告诉OpenGL ES 2.0使用纹理作为深度缓冲区?
我想在OpenGL ES 2.0中渲染具有轮廓后处理效果的场景 首先,我渲染所有不透明对象。然后,我使用后处理着色器进行轮廓检测,该着色器使用深度缓冲区作为纹理。现在我想使用alpha混合渲染所有对象,不写入深度缓冲区,而是使用深度测试和用于轮廓检测的深度缓冲区纹理的值 如果我在后处理之前渲染半透明对象,则后处理会渲染不透明对象的轮廓,因为它们不会写入深度缓冲区 如何告诉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
// 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;