1

Scene3DQML で複数の s に表示される同じエンティティを挿入するにはどうすればよいですか?

(おそらく、私が QML にかなり慣れていないことは十分に明らかです)

マルチ ビューポート QMLの例 に似たものを作成したいと思いますが、ビューポートを異なるレイアウト (例: SplitView ) にしたい場合を除きます。

最終的には、エンティティ (MeshまたはSceneLoaderエンティティ) をビュー ( my Scene3D) の外で完全に作成し、コピーを持たずに同じデータを複数のビューで表示できるようにしたいと考えています。

Layout私は aを aに入れる運があまりありませんでしたScene3D. ビューの外でデータを定義する方法がわかりません。特に、components/ data/childrenプロパティに追加する方法がわからないためです。

たとえば、以下の (長い) 例では、 に注入するように設定することで の外側を定義する方法を理解しましたが、torusMesh2両方のに注入する方法を理解できません。Scene3D.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