1

目前我正在使用 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_FACEGL_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_TESTGL_CULL_FACE实际上,是否启用并不重要。无论如何,它呈现黑屏。 在此处输入图像描述

这是没有任何阴影的图像,只是为了向您展示模型很好。 在此处输入图像描述

我尝试手动设置格式,但没有帮助。还是黑屏:

QSurfaceFormat format;
format.setDepthBufferSize(24);
this->setFormat(format);

哦,是的,我在函数glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);的开头设置了。paintGL()

4

0 回答 0