Qt3d: Artifacts of displaying when applied Qt3DRender::QLayerFilter

ぃ、小莉子 提交于 2019-12-31 03:45:34

问题


I am trying to use layer filtering as shown in this answer. For this I wrote a simple test (see below). This is a continuation of the question.

At a certain position of the red sphere, an artifact appears, which looks like display from the another camera in coordinates (0.0, 0.0, 0.0).

See screen:

In my example, the red sphere can be moved with the WSAD buttons. See (-7, 0, -14) red sphere position. How to remove these artifacts? The full test project can be viewed here.

main.cpp

int main(int argc, char *argv[])
{
    QGuiApplication application(argc, argv);
        My3DWindow window;

        auto sphere1 = new Qt3DCore::QEntity(window.Scene());
        auto sphere2 = new Qt3DCore::QEntity(window.Scene());

        // material, transform, mesh initialisation

        sphere1->addComponent(material1);
        sphere1->addComponent(spheremesh1);
        sphere1->addComponent(transform1);
        sphere1->addComponent(window.OpaqueLayer());

        sphere2->addComponent(material2);
        sphere2->addComponent(spheremesh2);
        sphere2->addComponent(transform2);
        sphere2->addComponent(window.TransparentLayer());

        window.show();
        return application.exec();
    }

My3DWindow class:

My3DWindow::My3DWindow(QScreen *screen):
    Qt3DExtras::Qt3DWindow(screen)
{
    m_Scene = new Qt3DCore::QEntity;
    setRootEntity(m_Scene);

    auto renderSurfaceSelector = new Qt3DRender::QRenderSurfaceSelector(m_Scene);
    renderSurfaceSelector->setSurface(this);
    auto clearBuffers = new Qt3DRender::QClearBuffers(renderSurfaceSelector);
    clearBuffers->setBuffers(Qt3DRender::QClearBuffers::AllBuffers);
    clearBuffers->setClearColor(Qt::gray);

    auto viewport = new Qt3DRender::QViewport(renderSurfaceSelector);
    auto cameraSelector = new Qt3DRender::QCameraSelector(viewport);

    m_Camera = new Qt3DRender::QCamera(cameraSelector);
    m_Camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
    m_Camera->setPosition(QVector3D(0.0f, 0.0f, 100.0f));
    m_Camera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));

    cameraSelector->setCamera(m_Camera);

    auto cameraController = new Qt3DExtras::QFirstPersonCameraController(m_Scene);
    cameraController->setCamera(m_Camera);

    m_OpaqueLayer = new Qt3DRender::QLayer;
    auto opaqueFilter = new Qt3DRender::QLayerFilter(m_Camera);
    opaqueFilter->addLayer(m_OpaqueLayer);

    m_TransparentLayer = new Qt3DRender::QLayer;
    auto transparentFilter = new Qt3DRender::QLayerFilter(m_Camera);
    transparentFilter->addLayer(m_TransparentLayer);

    setActiveFrameGraph(renderSurfaceSelector);
}

来源:https://stackoverflow.com/questions/59464455/qt3d-artifacts-of-displaying-when-applied-qt3drenderqlayerfilter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!