我正在使用帧缓冲器并且我已经在我的场景中制作了一面镜子。除深度测试外,它工作正常。试图让它运作困难。 (当渲染到默认帧缓冲区时 - 深度测试工作正常)。非常感谢任何帮助。这是代码:
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
答案 0 :(得分:1)
您的farme缓冲区尚未完成,因为GL_DEPTH
不是渲染缓冲区存储的有效内部格式。
见glRenderbufferStorage
。试试GL_DEPTH_COMPONENT16
,GL_DEPTH_COMPONENT24
或GL_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)命令,之后它就可以工作了。