我正在尝试在 qt3d 中启用多重采样。 Qt3DExtras::Qt3DWindow 在初始化期间已经执行了以下操作:
format.setDepthBufferSize(24);
format.setSamples(4);
format.setStencilBufferSize(8);
setFormat(format);
QSurfaceFormat::setDefaultFormat(format);
这是一个好的开始。所以根据这个帖子 https://stackoverflow.com/questions/14474259/how-do-i-enable-multisampling-antialiasing-in-opengl-with-qt5,启用多重采样所需的唯一 OpenGL 调用是
glEnable(GL_MULTISAMPLE);
事实上,文档QMultiSampleAntiAliasing 的文档 https://doc.qt.io/Qt-5/qt3drender-qmultisampleantialiasing.html states:
注意:当使用 OpenGL 作为图形 API 时,如果 QMultiSampleAntiAliasing 已添加到渲染状态,则将调用 glEnable(GL_MULTISAMPLE)。
因此,为了将 QMultiSampleAntiAliasing 添加到 Framegraph,我提出了以下建议:
//For antialiasing
Qt3DRender::QRenderStateSet *multiSampleRenderStateSet = new Qt3DRender::QRenderStateSet;
Qt3DRender::QMultiSampleAntiAliasing *msaa = new Qt3DRender::QMultiSampleAntiAliasing;
multiSampleRenderStateSet->addRenderState(msaa);
this->activeFrameGraph()->setParent(multiSampleRenderStateSet);
this->setActiveFrameGraph(multiSampleRenderStateSet);
但显然,由于这会覆盖全局所有默认的 RenderStates,因此我的渲染结果非常混乱。我什至不确定多重采样是否已启用(或者之前是否已启用?)。
基本上,我的问题是:
将 QRenderState 添加到默认 QForwardRenderer 框架图的最简单方法是什么?尤其是 QMultiSampleAntiAliasing?