En esta página

Qt Quick 3D - Ejemplo de RuntimeLoader

Demuestra cómo se pueden cargar activos en tiempo de ejecución.

Múltiples modelos de coches con instanciación y controles en la barra de herramientas

Este ejemplo muestra cómo implementar un visor de activos simple utilizando el RuntimeLoader.

Vea la documentación del ejemplo introductorio para una explicación de cómo configurar una escena básica. Una vez que tenemos la escena configurada podemos añadir el elemento RuntimeLoader:

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

La carga de un activo se realiza estableciendo la propiedad source de RuntimeLoader. En este ejemplo, source está vinculado a importUrl, que cambiará cuando el usuario seleccione un archivo en el diálogo de archivos.

Suponiendo que el activo se pueda cargar, el contenido se creará como hijo de RuntimeLoader importNode . Tenga en cuenta que el RuntimeLoader es un tipo Node, y puesto que también es el nodo raíz del activo cargado, cualquier transformación aplicada al importNode también afectará a sus hijos.

Tratamiento de errores

Si un activo no se carga, la propiedad status de RuntimeLoader se establecerá en Error. errorString de RuntimeLoader puede consultarse para obtener una descripción más detallada del error.

En este ejemplo, mostraremos el mensaje de error en un cuadro rojo en el centro de la pantalla:

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
    }
}
Mover la cámara

Para hacer posible cambiar la posición de la cámara usamos el WasdController del módulo Helpers y lo enlazamos a nuestra cámara, así:

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

Además del WasdController, el ejemplo utiliza un WheelHandler y un PointerHandler para escalar y rotar el modelo.

Instanciación de

El elemento RuntimeLoader también se puede utilizar en combinación con instanciación, como se muestra aquí:

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 no hereda de Model, pero tiene su propia propiedad instancing que nos permite instanciar un activo importado complejo como si fuera un modelo simple. En este caso utilizamos el componente RandomInstancing del módulo Helpers para posicionar aleatoriamente elementos dentro de un área fija y con un color aleatorio.

Anulación de materiales

A veces, al cargar un asset, es posible que no tenga el aspecto esperado. La propiedad materialOverride cambiará cómo se renderiza cada material en la escena para mostrar una contribución particular al renderizado general. Esto puede ser útil para determinar qué es exactamente lo que no es correcto en el asset, de modo que el asset original pueda ser ajustado si es necesario.

Modelo 3D renderizado con anulación de material de mapa de normales que muestra los detalles de la superficie

Proyecto de ejemplo @ 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.