目前我正在使用 Qt 和 OpenGL 编写一个小型应用程序,并选择QOpenGLWidget
用于渲染图形。
这就是我声明我的小部件的方式:
class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions{
// Methods, slots, e.t.c
}
这就是构造函数:
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
/* Tried this, it didn't help.
QSurfaceFormat format;
format.setDepthBufferSize(24);
this->setFormat(format);
*/
}
在我的初始化函数中,我设置GL_CULL_FACE
和GL_DEPTH_TEST
:
void GLWidget::initializeGL()
{
/* Some initialization stuff regarding the scene */
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
而且我真的不知道为什么小部件会呈现黑屏。这里有一些图片。第一个:带 disabledGL_CULL_FACE
和 disabled GL_DEPTH_TEST
。
第二个:启用GL_CULL_FACE
和禁用GL_DEPTH_TEST
。也许这不是一张好照片,但我可以向你保证,你可以透过另一个表面看到一些表面。
第三个:启用GL_CULL_FACE
和启用GL_DEPTH_TEST
。GL_CULL_FACE
实际上,是否启用并不重要。无论如何,它呈现黑屏。
我尝试手动设置格式,但没有帮助。还是黑屏:
QSurfaceFormat format;
format.setDepthBufferSize(24);
this->setFormat(format);
哦,是的,我在函数glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
的开头设置了。paintGL()