En esta página

Qt Quick 3D - Ejemplo de capas

Demuestra el uso de capas en QtQuick3D.

Tres capas apiladas del logotipo de Qt en rojo, verde y azul con casillas de verificación de alternancia de capas

En este ejemplo, los modelos de logotipos de diferentes colores se colocan en diferentes capas. Desde el panel de configuración, los usuarios pueden controlar la visibilidad de cada capa activando las casillas de verificación.

Preparación de las capas de la escena

Capas

Por conveniencia ponemos un alias al tipo de enums Layer para que sea más fácil de identificar.

readonly property int redModels: ContentLayer.Layer1
readonly property int greenModels: ContentLayer.Layer2
readonly property int blueModels: ContentLayer.Layer3
Cámara

Como queremos filtrar la vista de la cámara basándonos en las capas, necesitamos establecer las capas que la cámara debe renderizar. Hacemos esto estableciendo la propiedad layers de la cámara a una o más capas. La cámara sólo renderizará aquellos objetos que estén en la layers especificada. Por defecto la cámara renderizará nodos de todos los layers.

Para poder seleccionar las capas activas creamos una propiedad cameraFilter y la vinculamos a la propiedad layers de la cámara.

property int cameraFilter: ContentLayer.LayerAll

camera: PerspectiveCamera {
    layers: v3d.cameraFilter
    position: Qt.vector3d(0, 400, 500)
    eulerRotation.x: -30
    clipFar: 2000
}

Cuando se activan las casillas de verificación en el panel de configuración, la propiedad cameraFilter se actualizará para incluir o excluir las capas respectivas. De esta forma, la cámara sólo renderizará los objetos que se encuentren en las capas especificadas por la propiedad cameraFilter.

CheckBox {
    id: checkBoxRedLayer
    text: qsTr("Red Layer")
    checked: true
    onCheckedChanged: {
        v3d.cameraFilter = checked ? v3d.cameraFilter | v3d.redModels : v3d.cameraFilter & ~v3d.redModels;
    }
}
Modelos

Ahora es necesario asignar los tres modelos de colores diferentes a las capas respectivas. Al igual que con la cámara, podemos utilizar la propiedad layers del modelo para asignarlo a una capa. El modelo del logotipo rojo se asigna a la capa redLayer, el verde a la capa greenLayer, y el azul a la capa blueLayer.

Node {
    position: Qt.vector3d(0, 200, 0)
    Model {
        source: "qtlogo.mesh"
        layers: v3d.redModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "red"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 15000
            loops: Animation.Infinite
        }
    }

    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "red"
            roughness: 0.5
        } ]
    }
}

Node {
    position: Qt.vector3d(0, 100, 0)
    Model {
        source: "qtlogo.mesh"
        layers: v3d.greenModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "green"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 20000
            loops: Animation.Infinite
        }
    }
    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "green"
            roughness: 0.5
        } ]
    }
}
Node {
    Model {
        source: "qtlogo.mesh"
        layers: v3d.blueModels
        scale: Qt.vector3d(5000, 5000, 5000)
        materials:[ PrincipledMaterial {
            baseColor: "blue"
            roughness: 0.5
        } ]

        NumberAnimation on eulerRotation.y {
            from: 0
            to: 360
            duration: 12500
            loops: Animation.Infinite
        }
    }
    Model {
        position: Qt.vector3d(0, -50, 0)
        source: "#Cylinder"
        materials:[ PrincipledMaterial {
            baseColor: "blue"
            roughness: 0.5
        } ]
    }
}

Con las capas configuradas, la cámara sólo renderizará los modelos que estén en las capas especificadas por cameraFilter. El usuario puede cambiar la visibilidad de cada capa marcando o desmarcando las casillas de verificación en el panel de configuración.

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.