c++ - 如何使用 Qt3D 设置多个视口而无需使用 QML
问题描述
我想设置一个类似于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++。
解决方案
您必须使用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
推荐阅读
- ios - 构建 Xcode 9.4.1 时使用 rawEmbeddedThumbnailPhotoFormat
- java - 从图像视图获取图像并将此图像发送到具有编码位图的其他片段
- ios - Tableview 有时会被正确填充,而且大多数时候它是空的
- javascript - Laravel 和 Vuejs 集成 - Vuejs 混合
- javascript - 以更好的方式访问嵌入式画面
- mysql - sqoop 从 mysql 导入 hbase: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.HBaseAdmin
- excel - SAP GUI 导出自动打开 excel
- ruby-on-rails - ember 中 record.save() 的自定义路由
- ruby-on-rails - 用于删除外键的 RESTFUL 端点
- chef-infra - 厨师刀命令显示所有属性