QMultiSampleAntiAliasing

QMultiSampleAntiAliasing

我正在尝试在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的文档指出:



因此,要将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?

最佳答案

好的,因此在阅读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,并给了我看似干净的渲染。

关于c++ - 将QMultiSampleAntiAliasing添加到QForwardRenderer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51331270/

10-09 06:39