En esta página

Qt Quick 3D - Ejemplo de renderizado en instancias

Demuestra cómo hacer renderizado en instancias en Qt Quick 3D.

Escena espacial con un campo de asteroides y dos naves espaciales para demostrar el renderizado en instancias

Este ejemplo muestra cómo hacer renderizado en instancias utilizando la API QML básica.

Los modelos de nave espacial y asteroide fueron creados usando la herramienta de modelado Blender 3D, e importados con balsam.

Instanciación aleatoria

Usamos RandomInstancing para hacer una tabla aleatoria que defina nuestro campo de asteroides:

RandomInstancing {
    id: randomInstancing
    instanceCount: 1500

    position: InstanceRange {
        from: Qt.vector3d(-300, -200, -500)
        to: Qt.vector3d(300, 200, 200)
    }
    scale: InstanceRange {
        from: Qt.vector3d(1, 1, 1)
        to: Qt.vector3d(10, 10, 10)
        proportional: true
    }
    rotation: InstanceRange {
        from: Qt.vector3d(0, 0, 0)
        to: Qt.vector3d(360, 360, 360)
    }
    color: InstanceRange {
        from: "grey"
        to: "white"
        proportional: true
    }

    randomSeed: 2021
}

La posición y la rotación pueden variar libremente. La escala es uniforme en todas las direcciones y los colores son en escala de grises. Esto se hace configurando el atributo proportional.

Las naves espaciales se colocan manualmente utilizando InstanceList:

InstanceListEntry {
    id: redShip
    eulerRotation: Qt.vector3d(0, 180, 0)
    color: "red"
    PropertyAnimation on position {
        from: Qt.vector3d(50, 10, 100)
        to: Qt.vector3d(-70, 10, 100)
        duration: 8000
    }
}

InstanceListEntry {
    id: greenShip
    position: Qt.vector3d(0, 0, -60)
    eulerRotation: Qt.vector3d(-10, 0, 30)
    color: "green"
}

InstanceListEntry {
    id: blueShip
    position: Qt.vector3d(-100, -100, 0)
    color: "blue"
}

InstanceList {
    id: manualInstancing
    instances: [ redShip, greenShip, blueShip ]
}

Las propiedades de InstanceListEntry son vinculables: aquí animamos la nave roja para que cruce la trayectoria de la cámara.

Por último, aplicamos las tablas de instanciación a los objetos:

Asteroid {
    instancing: randomInstancing
    NumberAnimation on eulerRotation.x {
        from: 0
        to: 360
        duration: 11000
        loops: Animation.Infinite
    }
}

SimpleSpaceship {
    instancing: manualInstancing
}

Al animar la rotación del modelo del asteroide, todas las instancias rotarán sin tener que cambiar el contenido de la tabla de instancias. Como las instancias de los asteroides tienen rotaciones aleatorias, todos los asteroides rotarán alrededor de diferentes ejes.

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.