Qt Quick 3D - RuntimeLoader Example

Image non disponible

This example shows how to implement a simple asset viewer using the RuntimeLoader.

See the introductory example documentation for an explanation of how to set up a basic scene. Once we have the scene set up we can add the RuntimeLoader item:

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

Loading an asset is done by setting the RuntimeLoader's source property. In this example the source is bound to the importUrl which will be changed when the user selects a file in the file-dialog.

Assuming the asset can be loaded, the content will be created as children of the RuntimeLoader importNode. Note that the RuntimeLoader is a Node type, and since it is also the root node for the loaded asset, any transforms applied to the importNode will also affect its children.

Error handling

If an asset fails to load then the RuntimeLoader's status property will be set to Error. The RuntimeLoader's errorString can then be queried to get a more detailed description of the error.

In this example we will be displaying the error message in a red message box in the middle of the screen, like this:

 
Sélectionnez
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
    }
}

Moving the camera

To make it possible to change the position of the camera we use the WasdController from the Helpers module and bind it to our camera, like this:

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