如何在Qt3d中将rendersetting组件添加到我的根实体中?

时间:2019-10-16 10:00:01

标签: opengl qt3d

我正在处理有关qt3d的一些代码。我创建了一个Qt3DWindow(命名视图)。

尝试在其中添加一个根实体(名为rootEntity)。

像这样放置一个立方体实体:

m_cubeEntity = new Qt3DCore::QEntity;
...
Qt3DExtras::QCuboidMesh *cubeMesh = new Qt3DExtras::QCuboidMesh;
Qt3DRender::QMaterial *cubeMaterial = new Qt3DRender::QMaterial;
Qt3DCore::QTransform *cubeTransform = new Qt3DCore::QTransform;
Qt3DRender::QObjectPicker *objectPicker = new Qt3DRender::QObjectPicker;
...
m_cubeEntity.addComponent(cubeMesh);
m_cubeEntity.addComponent(cubeMaterial);
m_cubeEntity.addComponent(cubeTransform);
m_cubeEntity.adComponent(objectPicker);

m_cubeEntity.setParent(m_rootEntity);

一切正常。

然后我发现使用PickingSettings.BoundingVolumePicking选择我的多维数据集实体是不准确的。我想要PickingSettings.TrianglePicking。 ================================================== ================= /

所以我就这样:

    m_renderSettings = new Qt3DRender::QRenderSettings();
    m_renderSettings->pickingSettings()->setPickMethod(Qt3DRender::QPickingSettings::TrianglePicking);
    m_renderSettings->pickingSettings()->setPickResultMode(Qt3DRender::QPickingSettings::AllPicks);
    m_renderer = new Qt3DExtras::QForwardRenderer();
    m_renderer->setClearColor(Qt::lightGray);
    m_renderSettings->setActiveFrameGraph(m_renderer);
    m_rootEntity->addComponent(m_renderSettings);

但是现在什么也没有呈现。如果我从rootEntity删除“ m_renderSettings”,一切都会正确。

如何为根实体正确设置渲染设置?

1 个答案:

答案 0 :(得分:2)

很可能您只是设置了错误的框架。您可以使用dumpObjectTree()轻松显示标准框架图,这在调试Qt3D框架图时非常有用。

对于您的简单用例,只需使用renderSettings的{​​{1}}中已经包含的activeFrameGraph()

只需尝试以下简单的应用,其中包含您想要的Qt3DWindow

QObjectPicker