QML在两个Scene3D中渲染相同的实体

时间:2016-11-21 17:09:43

标签: qml qtquick2 qqmlcomponent

如何在QML中插入同一个实体以显示多个Scene3D

(可能非常清楚我对QML很陌生)

我想创建类似于Multi Viewport QML Example的内容,但我希望将视口设置为不同的布局(例如SplitView)。

最终,我希望我的实体(MeshSceneLoader实体)完全在我的视图之外创建(我的Scene3D),并且能够在多个视图中显示相同的数据没有副本的观点。

我没有把Layout放到Scene3D中,但即便如此,这也会限制我不要在其他地方显示相同的数据。我无法弄清楚如何在视图之外定义数据,尤其是因为我无法弄清楚如何附加到components / data / children属性。

例如,在下面的(长)示例中,我通过设置torusMesh2Scene3D注入.parent,找出如何在scene3DRightEntity之外定义Scene3D {1}},但我无法弄清楚如何将它注入import QtQuick 2.0 import Qt3D.Core 2.0 import Qt3D.Render 2.0 import Qt3D.Input 2.0 import QtQuick.Layouts 1.3 import QtQuick.Controls 1.3 import QtQuick.Scene3D 2.0 import Qt3D.Extras 2.0 Item { Button { text: 'Button' onClicked: { console.log('Button clicked'); } } SphereMesh { id: torusMesh2; radius: 5 parent: scene3DRightEntity } PhongMaterial { id: material2; parent: scene3DRightEntity } Transform { id: torusTransform2; scale3D: Qt.vector3d(1.5, 1, 0.5); rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45); parent: scene3DRightEntity } Rectangle { id: topRect anchors.fill: parent; anchors.margins: 50 color: 'green' SplitView { anchors.fill: parent; orientation: Qt.Horizontal Rectangle { id: scene anchors.margins: 50; width: 200; Layout.minimumWidth: 100; Layout.maximumWidth: 500 color: "darkRed" Text { text: "View 1"; anchors.centerIn: parent } Scene3D { id: scene3dLeft anchors.fill: parent; anchors.margins: 10; focus: true aspects: ["input", "logic"] cameraAspectRatioMode: Scene3D.AutomaticAspectRatio Entity { SimpleCamera { id: camera1; fieldOfView: 45; position: Qt.vector3d( 0.0, 0.0, 40.0 ) } components: [ RenderSettings { activeFrameGraph: ForwardRenderer { camera: camera1.camera clearColor: "transparent" } } , InputSettings { } ] TorusMesh { id: torusMesh1; radius: 5; minorRadius: 1; rings: 100; slices: 20 } PhongMaterial { id: material1 } Transform { id: torusTransform1; scale3D: Qt.vector3d(1.5, 1, 0.5); rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45) } Entity { id: torusEntity1 components: [ torusMesh1, material1, torusTransform1 ] } } } } Rectangle { id: scene2 Layout.fillWidth: true; Layout.minimumWidth: 50; Layout.maximumWidth: 400; height: 300 color: "darkBlue" Scene3D { id: scene3dRight anchors.fill: parent; anchors.margins: 50; focus: true; aspects: ["input", "logic"] cameraAspectRatioMode: Scene3D.AutomaticAspectRatio Entity { id: scene3DRightEntity SimpleCamera { id: camera2 position: Qt.vector3d( 0.0, 0.0, 40.0 ) } components: [ RenderSettings { activeFrameGraph: ForwardRenderer { camera: camera2.camera clearColor: "transparent" } } , InputSettings { } ] Entity { id: torusEntity2 components: [ torusMesh2, material2, torusTransform2 ] } } } } } } } // Item s

torusMesh2

更新

我的第一篇文章是SplitView作为.parent的孩子创建,此编辑会将其移至树的顶部并设置其vertx run de.avm.boundary.Sender -cluster -cp target/vertx-ping-pong-3.3.3-fat.jar -Dvertx.metrics.options.enabled=true

0 个答案:

没有答案