Auf dieser Seite

Qt Quick 3D - Beispiel für RuntimeLoader

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

Mehrere Fahrzeugmodelle mit Instanzierung und Steuerelementen in der Symbolleiste

Dieses Beispiel zeigt, wie man mit dem „ RuntimeLoader “ einen einfachen Asset-Viewer implementiert.

Eine Erläuterung zum Einrichten einer einfachen Szene finden Sie in der Dokumentation zum Einführungsbeispiel. Sobald die Szene eingerichtet ist, können wir das „ RuntimeLoader “-Element 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 “ des „ RuntimeLoader “. In diesem Beispiel ist die Eigenschaft „ source “ an die Eigenschaft „ importUrl “ gebunden, deren Wert sich ändert, sobald der Benutzer im Dateidialog eine Datei auswählt.

Sofern das Asset geladen werden kann, werden die Inhalte als untergeordnete Elemente des „ RuntimeLoader “ unter „ importNode “ erstellt. Beachten Sie, dass das „ RuntimeLoader “ vom Typ „ Node “ ist und da es gleichzeitig der Stammknoten für das geladene Asset ist, wirken sich alle auf das „ importNode “ angewendeten Transformationen auch auf dessen untergeordnete Elemente aus.

Fehlerbehandlung

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

In diesem Beispiel zeigen wir die Fehlermeldung in einem roten Meldungsfeld in der Mitte des Bildschirms an, 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
    }
}
Die Kamera bewegen

Um die Position der Kamera ändern zu können, verwenden wir den „ WasdController “ aus dem Modul „ Helpers “ und binden ihn wie folgt an unsere Kamera:

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

Zusätzlich zur „ WasdController “ verwendet das Beispiel eine „ WheelHandler “ und eine „ PointerHandler “, um das Modell zu skalieren und zu drehen.

Instanziierung

Das Element „ RuntimeLoader “ kann auch in Kombination mit der 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 erbt nicht von „Model“, verfügt jedoch über eine eigene „ instancing “-Eigenschaft, die es uns ermöglicht, ein komplexes importiertes Asset so zu instanziieren, als wäre es ein einfaches Modell. In diesem Fall verwenden wir die „ RandomInstancing “-Komponente aus dem „ Helpers “-Modul, um Elemente innerhalb eines festgelegten Bereichs zufällig zu positionieren und ihnen eine zufällige Farbe zuzuweisen.

Material-Überschreibungen

Manchmal sieht ein Asset beim Laden möglicherweise nicht wie erwartet aus. Die Eigenschaft „ materialOverride “ verändert die Art und Weise, wie jedes Material in der Szene gerendert wird, um einen bestimmten Beitrag zum Gesamtrendering zu leisten. Dies kann hilfreich sein, um festzustellen, was genau an dem Asset nicht korrekt ist, sodass das Original-Asset bei Bedarf angepasst werden kann.

3D-Modell, gerendert mit einer Übersteuerung des Normal-Map-Materials, die Oberflächendetails zeigt

Beispielprojekt @ code.qt.io

© 2026 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.