将QMultiSampleAntiAliasing添加到QForwardRenderer

Add QMultiSampleAntiAliasing to a QForwardRenderer

本文关键字:QForwardRenderer 添加 QMultiSampleAntiAliasing      更新时间:2023-10-16

我正在尝试在qt3d中启用多采样。Qt3DExtras::Qt3DWindow在初始化期间已经执行了以下操作:

format.setDepthBufferSize(24);
format.setSamples(4);
format.setStencilBufferSize(8);
setFormat(format);
QSurfaceFormat::setDefaultFormat(format);

这是一个良好的开端。因此,根据这篇文章,启用多重采样所需的唯一OpenGL调用将是

glEnable(GL_MULTISAMPLE);

事实上,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);

但很明显,由于这会全局覆盖所有默认的RenderStates,所以给我留下了一个非常混乱的渲染。我甚至不确定多重采样是否已启用(或者之前是否已启用?(。

所以基本上,我的问题是:

将QRenderState添加到默认QForwardRenderer帧图的最简单方法是什么?特别是QMultiSampleAntiAliasing

好的,所以在阅读了这个电子邮件线程之后,我现在使用以下行:

//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,并为我提供了一个看似干净的渲染。

相关文章:
  • 没有找到相关文章