深度缓冲区和模板缓冲区问题QML

法拉扎

我正在使用QML,并且想运行自定义OpenGL代码。我在C ++中创建了一个自定义Widget(扩展了QQuickItem),并覆盖了paint函数()。
当我运行我的应用程序时,控制台将打印

QSGContext::initialize: depth buffer support missing, expect rendering errors
QSGContext::initialize: stencil buffer support missing, expect rendering errors

正如它所预料的,我确实遇到了渲染错误。我将以蜘蛛模型为例。这就是它想要的

蜘蛛stl

这就是我得到的 在此处输入图片说明

我也不清楚如何描述它,但基本上,当我旋转它时,正对面(应该被正面遮住)显示出来。

我已经设法摆脱了深度缓冲区错误:

void MyGLWidget::handleWindowChanged(QQuickWindow *win)
{
    if (win) {
        connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection);
        connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection);
        win->setClearBeforeRendering(false);
        QSurfaceFormat glFormat;
        glFormat.setVersion(3,2);
        glFormat.setProfile(QSurfaceFormat::CoreProfile);




        /*I'm showing everything for context, but this is the key line*/
        glFormat.setDepthBufferSize(1); 






        win->setFormat(glFormat);

    }
}

所以现在我只得到模板错误,但这会导致另一个问题。一侧是完全黑色的,并且不显示任何照明。

在此处输入图片说明

其他一些背景信息:我正在显示QQuickView。我的OpenGLWidget导入到QML中并像这样嵌入:

MyGLWidget {
    id: glWidget
}

在我的渲染器的paint()方法,我打电话glEnable(GL_DEPTH_TEST),并glEnable(GL_STENCIL_TEST)在顶部,但似乎并没有做任何事情。也许我在错误的上下文中称呼它?但是,我不知道还能在哪里打电话。

法拉扎

事实证明,我的所有模型(包括蜘蛛网)的顶点法线都不正确,因此存在阴影问题。我应该在其他渲染软件中检查过它们。

glFormat.setDepthBufferSize(1) 是真正的解决办法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章