2

我正在整理帧缓冲区,并在我的场景中制作了一面镜子。除了深度测试外,它工作正常。被卡住试图让它工作。(当渲染到默认帧缓冲区时 - 深度测试工作正常)。将不胜感激任何帮助。这是代码:

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
4

2 回答 2

2

您的农场缓冲区不完整,因为GL_DEPTH渲染缓冲区存储没有有效的内部格式。见glRenderbufferStorage。尝试GL_DEPTH_COMPONENT16GL_DEPTH_COMPONENT24GL_DEPTH_COMPONENT32

glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 512, 512 );

请参阅OpenGL 4.6 核心配置文件规范,9.4 帧缓冲区完整性,第 323 页

附加图像的内部格式会影响帧缓冲区的完整性,因此首先定义图像的内部格式与可以附加到的附加点之间的关系很有用。

• 如果内部格式为 DEPTH_COMPONENT 或表 8.13 中基本内部格式为 DEPTH_COMPONENT 或 DEPTH_STENCIL 的格式之一,则该内部格式是可深度渲染的。没有其他格式是可深度渲染的。


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

glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
于 2018-01-13T11:34:57.733 回答
0

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

于 2018-01-14T18:10:01.323 回答