Qt Quick 3D - Exemple de lumière
Démontre l'utilisation de différents types de lumière.

Cet exemple illustre l'utilisation de trois types de lumière différents dans une application.
Réglage des lumières de la scène
Lumière directionnelle
La lumière directionnelle émet de la lumière dans une direction à partir d'une source non identifiable située à une distance infinie. Ce fonctionnement est similaire à celui de la lumière du soleil dans la vie réelle. Une lumière directionnelle a une portée infinie et ne diminue pas.
Nous configurons la lumière directionnelle pour qu'elle émette une couleur rouge et animons sa rotation autour de l'axe x.
DirectionalLight { id: light1 color: Qt.rgba(1.0, 0.1, 0.1, 1.0) ambientColor: Qt.rgba(0.1, 0.1, 0.1, 1.0) position: Qt.vector3d(0, 200, 0) rotation: Quaternion.fromEulerAngles(-135, -90, 0) shadowMapQuality: Light.ShadowMapQualityVeryHigh pcfFactor: 1 visible: directionalLightCheckBox.checked castsShadow: checkBoxShadows.checked brightness: directionalLightSlider.value SequentialAnimation on rotation { loops: Animation.Infinite QuaternionAnimation { to: Quaternion.fromEulerAngles(-45, -90, 0) duration: 2000 easing.type: Easing.InOutQuad } QuaternionAnimation { to: Quaternion.fromEulerAngles(-135, -90, 0) duration: 2000 easing.type: Easing.InOutQuad } } }
Lumière ponctuelle
La lumière ponctuelle peut être décrite comme une sphère émettant de la lumière avec la même intensité dans toutes les directions à partir du centre de la lumière. Cela ressemble à la façon dont une ampoule émet de la lumière.
Nous configurons la lumière ponctuelle pour qu'elle émette une couleur verte et animons sa position en coordonnées x.
PointLight { id: light2 color: Qt.rgba(0.1, 1.0, 0.1, 1.0) ambientColor: Qt.rgba(0.1, 0.1, 0.1, 1.0) position: Qt.vector3d(0, 300, 0) shadowMapFar: 2000 shadowMapQuality: Light.ShadowMapQualityHigh visible: pointLightCheckBox.checked castsShadow: checkBoxShadows.checked brightness: pointLightSlider.value SequentialAnimation on x { loops: Animation.Infinite NumberAnimation { to: 400 duration: 2000 easing.type: Easing.InOutQuad } NumberAnimation { to: 0 duration: 2000 easing.type: Easing.InOutQuad } } }
Lumière ponctuelle
La lumière ponctuelle est similaire à la lumière ponctuelle, sauf qu'elle émet de la lumière en forme de cône vers une seule direction au lieu de toutes les directions. Hormis l'angle du cône, une lumière ponctuelle a les mêmes caractéristiques et propriétés que la lumière ponctuelle.
Nous configurons la lumière ponctuelle pour qu'elle émette une couleur chaude et animons sa rotation en coordonnées y.
SpotLight { id: light4 color: Qt.rgba(1.0, 0.9, 0.7, 1.0) ambientColor: Qt.rgba(0.0, 0.0, 0.0, 0.0) position: Qt.vector3d(0, 250, 0) eulerRotation.x: -45 shadowMapFar: 2000 shadowMapQuality: Light.ShadowMapQualityHigh visible: spotLightCheckBox.checked castsShadow: checkBoxShadows.checked brightness: spotLightSlider.value coneAngle: 110 innerConeAngle: 70 PropertyAnimation on eulerRotation.y { loops: Animation.Infinite from: 0 to: -360 duration: 10000 } }
Définition des modèles de scène
Tout d'abord, nous ajoutons deux modèles rectangulaires qui serviront de sol et de mur arrière pour notre scène. Ces modèles sont utiles pour voir les ombres de la lumière.
Model { source: "#Rectangle" y: -200 scale: Qt.vector3d(15, 15, 15) eulerRotation.x: -90 materials: [ PrincipledMaterial { baseColor: Qt.rgba(0.8, 0.6, 0.4, 1.0) } ] } Model { source: "#Rectangle" z: -400 scale: Qt.vector3d(15, 15, 15) materials: [ PrincipledMaterial { baseColor: Qt.rgba(0.8, 0.8, 0.9, 1.0) } ] }
Ensuite, nous ajoutons notre modèle de logo principal qui est tourné autour de l'axe y.
Model { id: logoDefault source: "qtlogo.mesh" scale: Qt.vector3d(5000, 5000, 5000) property variant material materials: [ material ] property bool animate: true NumberAnimation on eulerRotation.y { running: logoDefault.animate loops: Animation.Infinite duration: 5000 from: 0 to: -360 } }
Nous ajoutons également de petits modèles de cubes pour démontrer la position et la rotation de chaque type de lumière. Ces cubes grossissent lorsque l'utilisateur accède aux curseurs correspondants.
Model { // Directional Light Marker property real size: directionalLightSlider.highlight ? 0.2 : 0.1 source: "#Cube" position: light1.position rotation: light1.rotation scale: Qt.vector3d(size, size, size * 2) materials: [ PrincipledMaterial { baseColor: light1.color lighting: PrincipledMaterial.NoLighting } ] castsShadows: false visible: directionalLightCheckBox.checked } Model { // Point Light Marker source: "#Sphere" position: light2.position rotation: light2.rotation property real size: pointLightSlider.highlight ? 0.2 : 0.1 scale: Qt.vector3d(size, size, size) materials: [ PrincipledMaterial { baseColor: light2.color lighting: PrincipledMaterial.NoLighting } ] castsShadows: false visible: pointLightCheckBox.checked } Node { // Spot Light Marker position: light4.position rotation: light4.rotation property real size: spotLightSlider.highlight ? 0.2 : 0.1 scale: Qt.vector3d(size, size, size) Model { source: "#Cone" castsShadows: false eulerRotation.x: 90 materials: PrincipledMaterial { baseColor: light4.color lighting: PrincipledMaterial.NoLighting } } visible: spotLightCheckBox.checked }
Dans le panneau de configuration, l'utilisateur peut activer les ombres et contrôler la visibilité et la luminosité de chaque lumière séparément.
© 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.