我正在尝试渲染一个帧缓冲区内的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()函数达到相同的效果。
到底出了什么问题?
1条答案
按热度按时间mf98qq941#
你的FBO有深度缓冲附件吗?
不,..。
那是你的问题。如果您的FBO没有
GL_DEPTH_ATTACHMENT
,则渲染到该FBO时深度测试将被禁用。若要在FBO上设置
GL_DEPTH_ATTACHMENT
,可以附加渲染缓冲区(使用glFramebufferRenderbuffer
)或纹理(使用glFramebufferTexture
)。这些渲染缓冲区/纹理需要采用其中一种深度格式。