1

如何将相同的实体插入到Scene3DQML 中的多个 s 中?

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

我想创建类似于Multi Viewport QML Example的东西,除了我想在不同的布局中使用视口(例如SplitView)。

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

我没有太多运气将 aLayout放入 aScene3D中,即便如此,这也会限制我在其他地方显示相同的数据。我根本不知道如何在视图之外定义我的数据,特别是因为我不知道如何附加到components//属性datachildren

例如,在下面的(长)示例中,我想出了如何通过设置将其注入到torusMesh2之外来定义,但我不知道如何将它注入到两个sScene3D.parentscene3DRightEntityScene3D

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

更新

我的第一篇文章是torusMesh2作为.SplitView.parent

4

0 回答 0