渲染到FBO时,深度测试不起作用

30byixjq  于 2022-10-18  发布在  其他
关注(0)|答案(1)|浏览(423)

我正在尝试渲染一个帧缓冲区内的3D金字塔,以便在ImGui窗口中显示它。但深度测试失败了,我得到了这样的结论:

这就是我所拥有的:

glEnable(GL_DEPTH_TEST);
while (!glfwWindowShouldClose(mainwin))
{
    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);

    ImGui_ImplOpenGL3_NewFrame();
    ImGui_ImplGlfw_NewFrame();
    ImGui::NewFrame();

    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    fbo.bind();//framebufferobject bind

    glClearColor(0.8f, 0.8f, 0.8f, 1.0f);

    glEnable(GL_DEPTH_TEST);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* Render here */       
    defaultshader.Activate();

    // Handles camera inputs
    camera1.Inputs(mainwin);
    // Updates and exports the camera matrix to the Vertex Shader
    camera1.Matrix(45.0f, 0.1f, 100.0f, defaultshader, "camMatrix");

    tex1.Bind();
    VAO1.Bind();
    // Draw primitives, number of indices, datatype of indices, index of indices
    glDrawElements(GL_TRIANGLES, sizeof(indices) / sizeof(int), GL_UNSIGNED_INT, 0);
    //---------------------------------------------------------------------------------------------------------------------------
    fbo.unbind();

    ImGui::Begin("Viewport");

    AppImguiAddImage(fbtex.FBtexID);//adds image to imgui drawlist

    ImGui::End();

    AppImguiFrameEnd();

    /* Swap front and back buffers */
    glfwSwapBuffers(mainwin);

    /* Poll for and process events */
    glfwPollEvents();

}

注:我从https://gamedev.stackexchange.com/questions/150214/render-in-a-imgui-window获得了AppImguiAddImage()和Clear()
为了得到相同的结果,我尝试了不同的颜色透明和深度透明的组合,以使While循环中的两个Clear()函数达到相同的效果。
到底出了什么问题?

mf98qq94

mf98qq941#

你的FBO有深度缓冲附件吗?
不,..。
那是你的问题。如果您的FBO没有GL_DEPTH_ATTACHMENT,则渲染到该FBO时深度测试将被禁用。
若要在FBO上设置GL_DEPTH_ATTACHMENT,可以附加渲染缓冲区(使用glFramebufferRenderbuffer)或纹理(使用glFramebufferTexture)。这些渲染缓冲区/纹理需要采用其中一种深度格式。

相关问题