Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt3D Filtering Entities
Forum Updated to NodeBB v4.3 + New Features

Qt3D Filtering Entities

Scheduled Pinned Locked Moved Unsolved General and Desktop
1 Posts 1 Posters 114 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AlexandrePTJ
    wrote on last edited by
    #1

    I am trying to display two entites into two different viewport. Looks like QFilter should help, but I don't know how.

    Here is what I did:

    #include <QApplication>
    
    #include <Qt3DCore/QEntity>
    #include <Qt3DCore/QTransform>
    #include <Qt3DExtras/QConeMesh>
    #include <Qt3DExtras/QGoochMaterial>
    #include <Qt3DExtras/QMetalRoughMaterial>
    #include <Qt3DExtras/QOrbitCameraController>
    #include <Qt3DExtras/QSphereMesh>
    #include <Qt3DExtras/Qt3DWindow>
    #include <Qt3DRender/QCamera>
    #include <Qt3DRender/QCameraSelector>
    #include <Qt3DRender/QClearBuffers>
    #include <Qt3DRender/QLayer>
    #include <Qt3DRender/QLayerFilter>
    #include <Qt3DRender/QNoDraw>
    #include <Qt3DRender/QObjectPicker>
    #include <Qt3DRender/QPickEvent>
    #include <Qt3DRender/QRenderSettings>
    #include <Qt3DRender/QRenderSurfaceSelector>
    #include <Qt3DRender/QViewport>
    
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
    
        auto rootNode        = new Qt3DCore::QEntity;
        auto rootScene       = new Qt3DCore::QEntity(rootNode);
        auto renderSettings  = new Qt3DRender::QRenderSettings(rootNode);
        auto surfaceSelector = new Qt3DRender::QRenderSurfaceSelector(renderSettings);
    
        renderSettings->setActiveFrameGraph(surfaceSelector);
        rootNode->addComponent(renderSettings);
    
        // Main viewport
        auto mainViewport = new Qt3DRender::QViewport(surfaceSelector);
        mainViewport->setNormalizedRect(QRectF(0, 0, 1, 1));
    
        // clear buffer + NoDrawBuffer
        auto clearBuffer = new Qt3DRender::QClearBuffers(mainViewport);
        clearBuffer->setBuffers(Qt3DRender::QClearBuffers::ColorDepthBuffer);
        clearBuffer->setClearColor(QColor(QRgb(0xa7a8db)));
        new Qt3DRender::QNoDraw(clearBuffer);
    
        // Left viewport
        auto leftViewport = new Qt3DRender::QViewport(mainViewport);
        leftViewport->setNormalizedRect(QRectF(0, 0, 0.5, 1));
        auto leftCamera = new Qt3DRender::QCamera(leftViewport);
        leftCamera->setProjectionType(Qt3DRender::QCameraLens::OrthographicProjection);
        leftCamera->setPosition(QVector3D(0, 0, 20.0f));
        leftCamera->setViewCenter(QVector3D(0, 0, 0));
        auto leftCameraSelector = new Qt3DRender::QCameraSelector(leftViewport);
        leftCameraSelector->setCamera(leftCamera);
        auto leftCameraController = new Qt3DExtras::QOrbitCameraController(leftViewport);
        leftCameraController->setCamera(leftCamera);
    
        // Right viewport
        auto rightViewport = new Qt3DRender::QViewport(mainViewport);
        rightViewport->setNormalizedRect(QRectF(0.5, 0, 0.5, 1));
        auto rightCamera = new Qt3DRender::QCamera(rightViewport);
        rightCamera->setProjectionType(Qt3DRender::QCameraLens::OrthographicProjection);
        rightCamera->setPosition(QVector3D(0, 0, 20.0f));
        rightCamera->setViewCenter(QVector3D(0, 0, 0));
        auto rightCameraSelector = new Qt3DRender::QCameraSelector(rightViewport);
        rightCameraSelector->setCamera(rightCamera);
        auto rightCameraController = new Qt3DExtras::QOrbitCameraController(rightViewport);
        rightCameraController->setCamera(rightCamera);
    
        // Sphere object
        auto sent  = new Qt3DCore::QEntity(rootScene);
        auto smesh = new Qt3DExtras::QSphereMesh(sent);
        smesh->setRadius(10.0);
        sent->addComponent(smesh);
        sent->addComponent(new Qt3DExtras::QGoochMaterial);
    
        // Cone object
        auto cent  = new Qt3DCore::QEntity(rootScene);
        auto cmesh = new Qt3DExtras::QConeMesh(cent);
        cmesh->setTopRadius(1.0);
        cmesh->setBottomRadius(12.0);
        cmesh->setLength(15);
        cent->addComponent(cmesh);
        cent->addComponent(new Qt3DExtras::QMetalRoughMaterial);
    
        // Show sphere on the left
        auto sphereLayer = new Qt3DRender::QLayer(sent);
        sphereLayer->setRecursive(true);
        sent->addComponent(sphereLayer);
        auto leftLayerFilter = new Qt3DRender::QLayerFilter(leftViewport);
        leftLayerFilter->addLayer(sphereLayer);
    
        // Show cone on the right
        auto coneLayer = new Qt3DRender::QLayer(cent);
        coneLayer->setRecursive(true);
        cent->addComponent(coneLayer);
        auto rightLayerFilter = new Qt3DRender::QLayerFilter(rightViewport);
        rightLayerFilter->addLayer(coneLayer);
    
        // Picker to select right viewport
        auto picker = new Qt3DRender::QObjectPicker(rootNode);
        QObject::connect(picker, &Qt3DRender::QObjectPicker::pressed, [&](Qt3DRender::QPickEvent* pick) {
            if (pick->viewport() == leftViewport)
            {
                leftCameraController->setEnabled(true);
                rightCameraController->setEnabled(false);
            }
            else if (pick->viewport() == rightViewport)
            {
                leftCameraController->setEnabled(false);
                rightCameraController->setEnabled(true);
            }
        });
        rootNode->addComponent(picker);
    
        // Display
        Qt3DExtras::Qt3DWindow w3d;
        w3d.setRootEntity(rootNode);
        w3d.setActiveFrameGraph(surfaceSelector);
        w3d.show();
    
        leftCamera->viewAll();
        rightCamera->viewAll();
    
        return app.exec();
    }
    

    Result is that both objects are display on both viewports. What did I miss ?

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved