Qt Quick 3D - RuntimeLoader の例
アセットをランタイムにロードする方法を示します。
この例では、RuntimeLoader を使用して、簡単なアセットビューアを実装する方法を示します。
基本的なシーンのセットアップ方法については、導入例のドキュメントを参照してください。シーンをセットアップしたら、RuntimeLoader アイテムを追加します:
RuntimeLoader { id: importNode source: windowRoot.importUrl instancing: instancingButton.checked ? instancing : null onBoundsChanged: helper.updateBounds(bounds) }
アセットをロードするには、RuntimeLoader のsource プロパティを設定します。この例では、source は、importUrl
にバインドされており、ユーザーがファイルダイアログでファイルを選択すると変更されます。
アセットが読み込まれると、コンテンツはRuntimeLoader importNode
の子として作成されます。RuntimeLoader はNode タイプであり、読み込まれたアセットのルートノードでもあるため、importNode
に適用されたトランスフォームはその子にも影響することに注意してください。
エラー処理
アセットの読み込みに失敗した場合、RuntimeLoader のstatus プロパティはError
に設定されます。RuntimeLoader のerrorString をクエリして、エラーの詳細を取得することができます。
この例では、エラーメッセージを画面中央の赤いメッセージボックスに表示します:
Rectangle { id: messageBox visible: importNode.status !== RuntimeLoader.Success color: "red" width: parent.width * 0.8 height: parent.height * 0.8 anchors.centerIn: parent radius: Math.min(width, height) / 10 opacity: 0.6 Text { anchors.fill: parent font.pixelSize: 36 text: "Status: " + importNode.errorString + "\nPress \"Import...\" to import a model" color: "white" wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } }
カメラの移動
カメラの位置を変更できるようにするために、Helpers モジュールのWasdController を使用し、次のようにカメラにバインドします:
OrbitCameraController { id: orbitController origin: orbitCameraNode camera: orbitCamera enabled: helper.orbitControllerEnabled } WasdController { id: wasdController controlledObject: wasdCamera enabled: !helper.orbitControllerEnabled }
この例では、WasdController に加えて、WheelHandler とPointerHandler を使って、モデルの拡大縮小と回転を行っています。
インスタンス化
RuntimeLoader アイテムは、インスタンス化と組み合わせて使うこともできます:
RandomInstancing { id: instancing instanceCount: 30 position: InstanceRange { property alias boundsDiameter: helper.boundsDiameter from: Qt.vector3d(-3*boundsDiameter, -3*boundsDiameter, -3*boundsDiameter); to: Qt.vector3d(3*boundsDiameter, 3*boundsDiameter, 3*boundsDiameter) } color: InstanceRange { from: "black"; to: "white" } }
RuntimeLoader は Model を継承しませんが、独自の プロパティを持っており、複雑なインポート アセットを単純なモデルのようにインスタンス化することができます。この場合、 モジュールの コンポーネントを使用して、アイテムを一定の領域内にランダムな色で配置します。instancing Helpers RandomInstancing
マテリアルのオーバーライド
アセットを読み込むとき、期待通りに見えないことがあります。materialOverride プロパティは、シーン内の各マテリアルのレンダリング方法を変更し、レンダリング全体に対する特定の寄与を表示します。これは、必要に応じて元のアセットを調整できるように、アセットについて正確には何が正しくないのかを判断するのに便利です。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。