Qt Quick 3D - Exemple de calques
Illustre l'utilisation des calques dans QtQuick3D.

Dans cet exemple, les modèles de logo de différentes couleurs sont placés dans des calques distincts. À partir du panneau des paramètres, les utilisateurs peuvent contrôler la visibilité de chaque calque en cochant ou décochant les cases correspondantes.
Préparation des calques de la scène
Calques
Pour plus de commodité, nous attribuons aux types d’énumération d’ Layer un alias permettant de les identifier plus facilement.
readonly property int redModels: ContentLayer.Layer1
readonly property int greenModels: ContentLayer.Layer2
readonly property int blueModels: ContentLayer.Layer3Caméra
Comme nous souhaitons filtrer la vue de la caméra en fonction des calques, nous devons définir les calques que la caméra doit afficher. Pour ce faire, nous définissons la propriété « layers » de la caméra sur un ou plusieurs calques. La caméra n’affichera alors que les objets se trouvant dans l’ layers e spécifiée. Par défaut, la caméra affiche les nœuds de tous les 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 paramètres sont activées ou désactivées, la propriété « cameraFilter » est mise à jour pour inclure ou exclure les calques correspondants. De cette manière, la caméra ne rendra que les objets se trouvant dans les calques spécifiés 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 affectés aux calques correspondants. 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 affecté 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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.redModels
SpriteParticle3D {
id: redParticle
color: "red"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: redParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}
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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.greenModels
SpriteParticle3D {
id: greenParticle
color: "green"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: greenParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}
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
} ]
}
ParticleSystem3D {
visible: particlesCheckbox.checked
running: particlesCheckbox.checked
layers: v3d.blueModels
SpriteParticle3D {
id: blueParticle
color: "blue"
maxAmount: 200
particleScale: 8
fadeInDuration: 500
fadeOutDuration: 500
}
ParticleEmitter3D {
particle: blueParticle
position: Qt.vector3d(0, -50, 0)
emitRate: 40
lifeSpan: 2000
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 120, 0)
directionVariation: Qt.vector3d(40, 40, 40)
}
}
}
}Une fois les calques configurés, la caméra ne rendra désormais que les modèles qui se trouvent dans les calques spécifiés par la propriété ` cameraFilter`. L'utilisateur peut activer ou désactiver la visibilité de chaque calque en cochant ou décochant les cases du panneau des paramètres.
© 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.