Sur cette page

Qt Quick 3D - Exemple de calques

Démontre l'utilisation des calques dans QtQuick3D.

Trois couches empilées du logo Qt en rouge, vert et bleu avec des cases à cocher pour les couches.

Dans cet exemple, les modèles de logos de différentes couleurs sont placés dans des calques différents. Dans le panneau des paramètres, les utilisateurs peuvent contrôler la visibilité de chaque calque en activant les cases à cocher.

Préparation des calques de la scène

Calques

Pour des raisons de commodité, nous donnons au type d'enums Layer un alias qui permet de l'identifier plus facilement.

readonly property int redModels: ContentLayer.Layer1
readonly property int greenModels: ContentLayer.Layer2
readonly property int blueModels: ContentLayer.Layer3
Caméra

Puisque nous voulons filtrer la vue de la caméra en fonction des calques, nous devons définir les calques que la caméra doit rendre. Pour ce faire, nous définissons la propriété layers de la caméra sur un ou plusieurs calques. La caméra ne rendra alors que les objets qui se trouvent sur le site layers spécifié. Par défaut, la caméra effectue le rendu des nœuds de toutes les couches layers.

Pour pouvoir sélectionner les couches actives, nous créons une propriété cameraFilter et la lions à la propriété layers de la caméra.

property int cameraFilter: ContentLayer.LayerAll

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

Lorsque les cases à cocher du panneau de configuration sont activées, la propriété cameraFilter est mise à jour pour inclure ou exclure les couches correspondantes. Ainsi, la caméra ne rendra que les objets qui se trouvent dans les couches spécifiées par la propriété cameraFilter.

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

Les trois modèles de couleurs différentes doivent maintenant être assignés à leurs calques respectifs. Comme pour la caméra, nous pouvons utiliser la propriété layers du modèle pour l'affecter à un calque. Le modèle du logo rouge est assigné au calque redLayer, le vert au calque greenLayer et le bleu au calque 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
        } ]
    }
}

Une fois les calques configurés, la caméra ne rendra que les modèles qui se trouvent dans les calques spécifiés par cameraFilter. L'utilisateur peut modifier la visibilité de chaque calque en cochant ou en décochant les cases dans le panneau des paramètres.

Exemple de projet @ 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.