我的深度纹理有什么问题?

时间:2016-03-21 19:52:26

标签: c++ opengl

目前我正在和FBO一起玩,我并不是真正掌握的。我没有彩色附件的问题,但我无法弄清楚如何在渲染中使用深度纹理。 此刻,我在FBO上渲染场景(颜色+深度),然后使用深度纹理绘制纹理四边形...但它不起作用,我的屏幕保持黑色(每次都是0:即使我倍增到1000时它保持在0)。 (深度测试工作:如果我渲染颜色纹理而不是深度,深度测试正常工作)

渲染循环:

///Render to FBO
glEnable(GL_DEPTH_TEST);

FBO.Bind(); //Do I really need to explain what it does ?
glUseProgram(ShaderProgram->getProgramID());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    ///Setting uniforms etc

mainScene.drawAll(); 


 //draw the quad

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glViewport(0, 0, m_window.getSize().x, m_window.getSize().y);

glUseProgram(2DShader.getProgramID());

quadModel.bindVAO();
glBindTexture(GL_TEXTURE_2D, FBO.DepthTexureID);
glDrawArrays(GL_TRIANGLES, 0, 6);

和FBO创作:

glGenFramebuffers(1, &FBO_ID);
glBindFramebuffer(GL_FRAMEBUFFER, FBO_ID);

    glGenTextures(1, &ColorBufferID);
    glBindTexture(GL_TEXTURE_2D, ColorBufferID);

        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ColorBufferID, 0);

glBindTexture(GL_TEXTURE_2D, 0);








glGenTextures(1, &DepthTexture);
        glBindTexture(GL_TEXTURE_2D, DepthTexture);
                glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
                glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, DepthTexture, 0);
        glBindTexture(GL_TEXTURE_2D, 0);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的深度纹理不是mipmap-complete,但您使用的是默认的mipmap过滤,因此采样将失败。只需指定一些非mipmapping过滤器(如GL_NEARESTLINEAR)即可对该纹理进行采样。