步骤:
创建一张带有深度值的纹理;
将此纹理附加到一个帧缓冲区对象上。 (阴影映射技术:使用深度纹理来决定一个点是否明亮)
实例:
glGenTextures(1, &depth_texture); //创建深度纹理
glBindTexture(GL_TEXTURE_2D, depth_texture);
glTexImage2D(GL_TEXTURE_2D, ..., GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //设置滤波模式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); //深度比较模式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //边界截取模式
glBindTexture(GL_TEXTURE_2D, 0);
glGenFramebuffers(1, &depth_fbo); //创建FBO以渲染深度信息
glBindFramebuffer(GL_FRAMEBUFFER, depth_fbo);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, depth_texture, 0);//关联深度纹理
glDrawBuffer(GL_NONE); //禁止渲染颜色,因为没有颜色附件点
glBindFramebuffer(GL_FRAMEBUFFER, 0);