[英]Qt5 OpenGL Multisampling using QOpenGLFrameBufferObject class
[英]OpenGL depth buffer using QOpenGLFramebufferObject not working
我有一個問題,其中OpenGL場景的深度無法正確渲染。 我在屏幕外渲染到QOpenGLFramebufferObject中。 如果我在QGLWidget中運行相同的代碼,它將很好。 這是代碼:
// SETUP
SurfaceFormat format;
QWindow window;
window.setSurfaceType(QWindow::OpenGLSurface);
window.setFormat(format);
window.create();
QOpenGLContext context;
context.setFormat(format);
if (!context.create()) {
qFatal("Cannot create the requested OpenGL context!");
}
QOpenGLFramebufferObjectFormat fboFormat;
fboFormat.setAttachment(QOpenGLFramebufferObject::Depth);
QSize drawRectSize(640, 480);
context.makeCurrent(&window);
QOpenGLFramebufferObject fbo(drawRectSize, fboFormat);
fbo.bind();
// OPENGL CODE
glViewport(0, 0, 640, 480);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glShadeModel(GL_FLAT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLoadMatrixf(pose->getOpenGLModelView());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
/* calculate prjection parameters */
gluPerspective(fov, aspect, 0.01, 1.0f);
glColor3d(1, 0, 0);
glBegin(GL_TRIANGLES);
/* Draw triangles */
glEnd();
glFlush();
QImage result = fbo.toImage());
任何想法我做錯了什么? 我檢查了GL_DEPTH_BITS,它似乎是0。在此先感謝:)
在您的代碼中,您永遠不會為FBO 請求深度附件。 您似乎要做的就是
QOpenGLFramebufferObjectFormat fboFormat;
QOpenGLFramebufferObject fbo(drawRectSize, fboFormat);
根據Qt文檔, QOpenGLFramebufferObjectFormat
構造器將執行以下操作:
默認情況下,格式指定無附件的非多樣本幀緩沖對象,紋理目標GL_TEXTURE_2D和內部格式GL_RGBA8。 在OpenGL / ES系統上,默認內部格式為GL_RGBA。
查看有關如何設置正確格式的Qt文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.