Qt Quick 3D - Beispiel „Lichter“
Veranschaulicht die Verwendung verschiedener Lichttypen.

Dieses Beispiel zeigt die Verwendung von drei verschiedenen Lichttypen in einer Anwendung.
Einrichten der Szenenlichter
Richtungslicht
Das gerichtete Licht strahlt in eine Richtung von einer nicht identifizierbaren Quelle aus, die sich in unendlicher Entfernung befindet. Dies ähnelt der Funktionsweise des Sonnenlichts im realen Leben. Ein gerichtetes Licht hat eine unendliche Reichweite und nimmt nicht ab.
Wir richten das gerichtete Licht so ein, dass es rotes Licht ausstrahlt, und animieren seine Drehung um die x-Achse.
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
}
}
}Punktlicht
Das Punktlicht lässt sich als Kugel beschreiben, die von ihrem Zentrum aus in alle Richtungen gleich starkes Licht ausstrahlt. Dies ähnelt der Art und Weise, wie eine Glühbirne Licht ausstrahlt.
Wir richten das Punktlicht so ein, dass es grünes Licht ausstrahlt, und animieren seine Position entlang der x-Koordinate.
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
}
}
}Spotlicht
Der Strahler ähnelt der Punktlichtquelle, strahlt jedoch Licht nicht in alle Richtungen, sondern kegelförmig in eine Richtung aus. Abgesehen vom Kegelwinkel weist ein Strahler dieselben Merkmale und Eigenschaften wie die Punktlichtquelle auf.
Wir richten ein Spotlicht so ein, dass es eine warme Farbe ausstrahlt, und animieren seine Drehung entlang der y-Koordinate.
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
}
}Einrichten der Szenenmodelle
Zunächst fügen wir zwei Rechteckmodelle hinzu, die als Boden und Rückwand für unsere Szene dienen. Diese sind nützlich, um Licht- und Schatteneffekte zu erkennen.
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)
}
]
}Anschließend fügen wir unser Hauptlogo-Modell hinzu, das um die y-Achse gedreht ist.
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
}
}Außerdem fügen wir kleine Würfelmodelle hinzu, um Position und Drehung der einzelnen Lichttypen zu veranschaulichen. Diese Würfel werden größer, wenn der Benutzer die entsprechenden Schieberegler betätigt.
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
}Über das Einstellungsfeld kann der Benutzer dann Schatten aktivieren und die Sichtbarkeit sowie Helligkeit jeder Lichtquelle separat steuern.
© 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.