我正在尝试在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/