Как настроить несколько окон просмотра с использованием Qt3D без использования QML - PullRequest
0 голосов
/ 06 июня 2018

Я бы хотел настроить сцену с несколькими окнами просмотра, похожую на https://doc.qt.io/archives/qt-5.10/qt3d-multiviewport-example.html, без необходимости использования QML.

На данный момент у меня есть одно представление, работающее с:

Qt3DExtras::Qt3DWindow* createView ( Qt3DCore::QEntity* rootEntity ) {

    Qt3DExtras::Qt3DWindow* view = new Qt3DExtras::Qt3DWindow();

    Qt3DRender::QCamera* camera = view->camera();
    camera->lens()->setPerspectiveProjection ( 45.0f, 16.0f / 9.0f, 0.1f, 1000.0f );
    camera->setPosition ( QVector3D ( 0, 0, 10.0f ) );
    camera->setViewCenter ( QVector3D ( 0, 0, 0 ) );

    Qt3DExtras::QOrbitCameraController* manipulator = new Qt3DExtras::QOrbitCameraController ( rootEntity );
    manipulator->setLinearSpeed ( 5.0f );
    manipulator->setLookSpeed ( 180.f );
    manipulator->setZoomInLimit ( 5.0f );
    manipulator->setCamera ( camera );

    return view;
}

По сути, вопрос заключается в том, как преобразовать код QML, представленный в примере, в C ++.

1 Ответ

0 голосов
/ 07 июня 2018

Вы должны использовать класс QViewport и функцию setNormalizedRect для указания в [0.0, 0.0, 1.0, 1.0].

Что-то вроде ниже.

//DECLARE A FRAME GRAPH
Qt3DRender::QFrameGraph *frameGraph = new Qt3DRender::QFrameGraph();
Qt3DRender::QTechniqueFilter *techniqueFilter = new Qt3DRender::QTechniqueFilter();

Qt3DRender::QViewport *viewport1 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport2 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport3 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport4 = new Qt3DRender::QViewport(techniqueFilter);

viewport1->setNormalizedRect(QRectF(0, 0, 0.5, 0.5));
viewport2->setNormalizedRect(QRectF(0.5, 0, 0.5, 0.5));
viewport3->setNormalizedRect(QRectF(0, 0.5, 0.5, 0.5));
viewport4->setNormalizedRect(QRectF(0.5, 0.5, 0.5, 0.5));

//SET ACTIVE FRAME GRAPH NODE TO YOUR WINDOW
your_qt3d_wndObject->setActiveFrameGraph(frameGraph->activeFrameGraph());

https://doc -snapshots.qt.io / qt5-5.9 / qt3drender-qviewport.html

...