我正在尝试在qt3d中启用多重采样。 Qt3DExtras :: Qt3DWindow在初始化过程中已经执行了以下操作:
format.setDepthBufferSize(24);
format.setSamples(4);
format.setStencilBufferSize(8);
setFormat(format);
QSurfaceFormat::setDefaultFormat(format);
这是一个好的开始。因此,根据this post,启用多重采样所需的唯一OpenGL调用将是
glEnable(GL_MULTISAMPLE);
事实上,documentation of QMultiSampleAntiAliasing的文档指出:
注意:使用OpenGL作为图形API时,如果QMultiSampleAntiAliasing已添加到渲染状态,则会调用glEnable(GL_MULTISAMPLE)。
因此,要将QMultiSampleAntiAliasing添加到框架图中,我想到了以下内容:
//For antialiasing
Qt3DRender::QRenderStateSet *multiSampleRenderStateSet = new Qt3DRender::QRenderStateSet;
Qt3DRender::QMultiSampleAntiAliasing *msaa = new Qt3DRender::QMultiSampleAntiAliasing;
multiSampleRenderStateSet->addRenderState(msaa);
this->activeFrameGraph()->setParent(multiSampleRenderStateSet);
this->setActiveFrameGraph(multiSampleRenderStateSet);
但是很明显,由于这会全局覆盖所有默认的RenderState,因此它给我带来了相当混乱的渲染。而且我甚至不确定多采样功能是否已启用(或者之前是否已经启用过?)。
所以基本上,我的问题是:
将QRenderState添加到默认QForwardRenderer框架图的最简单方法是什么?尤其是QMultiSampleAntiAliasing?
答案 0 :(得分:1)
好的,因此,在阅读this电子邮件线程之后,我现在使用以下几行:
//For antialiasing
Qt3DRender::QRenderStateSet *renderStateSet = new Qt3DRender::QRenderStateSet;
Qt3DRender::QMultiSampleAntiAliasing *msaa = new Qt3DRender::QMultiSampleAntiAliasing;
renderStateSet->addRenderState(msaa);
Qt3DRender::QDepthTest *depthTest = new Qt3DRender::QDepthTest;
depthTest->setDepthFunction(Qt3DRender::QDepthTest::LessOrEqual);
renderStateSet->addRenderState(depthTest);
this->activeFrameGraph()->setParent(renderStateSet);
this->setActiveFrameGraph(renderStateSet);
这显然恢复了Qt3D的默认DepthTest,并给了我看似干净的渲染。