简体   繁体   English

如何在不使用QML的情况下使用Qt3D设置多个视口

[英]How do I set up multiple viewports using Qt3D without having to use QML

I'd like to set up a multiple view port scene akin to https://doc.qt.io/archives/qt-5.10/qt3d-multiviewport-example.html without having to use QML. 我想设置一个类似于https://doc.qt.io/archives/qt-5.10/qt3d-multiviewport-example.html的多视图端口场景,而不必使用QML。

At the moment I've got a single view working with: 目前,我只使用一个视图:

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;
}

In essence, the question is how do I convert the QML code supplied in the example to C++. 本质上,问题是如何将示例中提供的QML代码转换为C ++。

You have to use QViewport class and setNormalizedRect function to specify with in [0.0, 0.0, 1.0, 1.0]. 您必须使用QViewport类和setNormalizedRect函数在[ QViewport进行指定。

Something like below. 像下面这样。

//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 https://doc-snapshots.qt.io/qt5-5.9/qt3drender-qviewport.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM