C++ 将QMultiSampleAntiAliasing添加到QForwardRenderer

C++ 将QMultiSampleAntiAliasing添加到QForwardRenderer,c++,qt,qt5,qt3d,C++,Qt,Qt5,Qt3d,我正在尝试在qt3d中启用多重采样。Qt3DExtras::Qt3DWindow在初始化期间已执行以下操作: format.setDepthBufferSize(24); 格式。设置样本(4); 格式。设置缓冲区大小(8); setFormat(格式); QSurfaceFormat::setDefaultFormat(格式); 这是一个好的开始。因此根据,启用多重采样所需的唯一OpenGL调用是 glEnable(GL_多样本); 事实上,各国的文件: 注意:使用OpenGL作为图形API

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

format.setDepthBufferSize(24);
格式。设置样本(4);
格式。设置缓冲区大小(8);
setFormat(格式);
QSurfaceFormat::setDefaultFormat(格式);
这是一个好的开始。因此根据,启用多重采样所需的唯一OpenGL调用是

glEnable(GL_多样本);
事实上,各国的文件:

注意:使用OpenGL作为图形API时,如果已将QMultiSampleAntiAliasing添加到渲染状态,则将调用glEnable(GL_MULTISAMPLE)

因此,为了将QMultiSampleAntiAliasing添加到Framegraph中,我提出了以下方法:

//用于抗锯齿
Qt3DRender::QRenderStateSet*multiSampleRenderStateSet=新的Qt3DRender::QRenderStateSet;
Qt3DRender::QMultiSampleAntiAliasing*msaa=新的Qt3DRender::QMultiSampleAntiAliasing;
multiSampleRenderStateSet->addRenderState(msaa);
此->activeFrameGraph()->setParent(multiSampleRenderStateSet);
此->setActiveFrameGraph(multiSampleRenderStateSet);
但很明显,由于这会全局覆盖所有默认的渲染状态,这会给我留下一个相当混乱的渲染。我甚至不确定多重采样是否已启用(或者之前是否已启用?)

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

向默认QForwardRenderer框架图添加QRenderState的最简单方法是什么?特别是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的默认深度测试,并提供了一个看似干净的渲染