使用自定义帧缓冲时,深度测试不起作用

时间:2018-01-13 11:21:53

标签: c++ opengl framebuffer depth-testing qopenglfunctions

我正在使用帧缓冲器并且我已经在我的场景中制作了一面镜子。除深度测试外,它工作正常。试图让它运作困难。 (当渲染到默认帧缓冲区时 - 深度测试工作正常)。非常感谢任何帮助。这是代码:

glEnable( GL_DEPTH_TEST );

glViewport( 0, 0, 512, 512 );

unsigned int fbo;
glGenFramebuffers( 1, &fbo );
glBindFramebuffer( GL_FRAMEBUFFER, fbo );

unsigned int rbo;
glGenRenderbuffers( 1, &rbo );
glBindRenderbuffer( GL_RENDERBUFFER, rbo );
glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH, 512, 512 );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );

glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, 
GL_RENDERBUFFER, rbo ); //if remove this, mirror works but without depth test
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 
this->mirror->texturePack[0]->textureId(), 0 ); 

//render scene from mirror camera

glBindFramebuffer( GL_FRAMEBUFFER, 0 );
glViewport( 0, 0, this->width(), this->height() );

//render scene from main camera

2 个答案:

答案 0 :(得分:1)

您的farme缓冲区尚未完成,因为GL_DEPTH不是渲染缓冲区存储的有效内部格式。  见glRenderbufferStorage。试试GL_DEPTH_COMPONENT16GL_DEPTH_COMPONENT24GL_DEPTH_COMPONENT32

glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 512, 512 );

请参阅OpenGL 4.6 core profile specification, 9.4 Framebuffer Completeness, page 323

  

附加图像的内部格式会影响图像的完整性   framebuffer,因此首先定义内部之间的关系是有用的   图像的格式以及可以附加的附着点。

     

•如果内部格式为DEPTH_COMPONENT或内部格式,则可以进行深度渲染   表8.13格式的基本内部格式为DEPTH_-   COMPONENT或DEPTH_STENCIL。没有其他格式可以深度渲染。


注意,可以通过以下方式检查帧缓冲区的完整性:

glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE

答案 1 :(得分:0)

我终于解决了。我在绑定镜像帧缓冲区之后立即添加了glClear(GL_DEPTH_BUFFER_BIT)命令,之后它就可以工作了。