Qt Quick 3D - RuntimeLoader-Beispiel

Zeigt, wie Assets zur Laufzeit geladen werden können.

Dieses Beispiel zeigt, wie man einen einfachen Asset-Viewer mit Hilfe von RuntimeLoader implementiert.

In der einführenden Beispieldokumentation wird erklärt, wie man eine einfache Szene einrichtet. Sobald wir die Szene eingerichtet haben, können wir das Element RuntimeLoader hinzufügen:

RuntimeLoader {
    id: importNode
    source: windowRoot.importUrl
    instancing: instancingButton.checked ? instancing : null
    onBoundsChanged: helper.updateBounds(bounds)
}

Das Laden eines Assets erfolgt durch Setzen der Eigenschaft source von RuntimeLoader. In diesem Beispiel ist source an importUrl gebunden, das geändert wird, wenn der Benutzer eine Datei im Dateidialog auswählt.

Unter der Voraussetzung, dass das Asset geladen werden kann, wird der Inhalt als Kind des RuntimeLoader importNode erstellt. Beachten Sie, dass RuntimeLoader ein Typ Node ist, und da er auch der Wurzelknoten für das geladene Asset ist, wirken sich alle auf importNode angewendeten Transformationen auch auf seine Kinder aus.

Fehlerbehandlung

Wenn ein Asset nicht geladen werden kann, wird die Eigenschaft status von RuntimeLoader auf Error gesetzt. errorString von RuntimeLoader kann dann abgefragt werden, um eine genauere Beschreibung des Fehlers zu erhalten.

In diesem Beispiel wird die Fehlermeldung in einem roten Nachrichtenfeld in der Mitte des Bildschirms angezeigt, etwa so:

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
    }
}
Bewegen der Kamera

Um die Position der Kamera zu verändern, verwenden wir das WasdController aus dem Helpers Modul und binden es an unsere Kamera, wie hier:

OrbitCameraController {
    id: orbitController
    origin: orbitCameraNode
    camera: orbitCamera
    enabled: helper.orbitControllerEnabled
}
WasdController {
    id: wasdController
    controlledObject: wasdCamera
    enabled: !helper.orbitControllerEnabled
}

Zusätzlich zu WasdController verwendet das Beispiel ein WheelHandler und ein PointerHandler, um das Modell zu skalieren und zu rotieren.

Instanzierung von

Das Element RuntimeLoader kann auch in Kombination mit Instanzierung verwendet werden, wie hier gezeigt:

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 erbt nicht von Model, sondern hat seine eigene instancing Eigenschaft, die es uns ermöglicht, ein komplexes importiertes Asset zu instanzieren, als wäre es ein einfaches Modell. In diesem Fall verwenden wir die Komponente RandomInstancing aus dem Modul Helpers, um Elemente zufällig in einem festen Bereich und mit einer zufälligen Farbe zu positionieren.

Materialüberschreibungen

Beim Laden eines Assets kann es vorkommen, dass es nicht so aussieht wie erwartet. Die Eigenschaft materialOverride ändert, wie jedes Material in der Szene gerendert wird, um einen bestimmten Beitrag zum Gesamtrendering anzuzeigen. Dies kann nützlich sein, um festzustellen, was genau an dem Asset nicht korrekt ist, so dass das Original-Asset bei Bedarf angepasst werden kann.

Beispielprojekt @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.