Qt Quick 3D - Lights Example
import QtQuick
import QtQuick3D
import QtQuick.Controls
Window {
width: 1280
height: 720
visible: true
title: qsTr("Lights Example")
View3D {
anchors.fill: parent
environment: SceneEnvironment {
clearColor: "#808080"
backgroundMode: SceneEnvironment.Color
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
}
PerspectiveCamera {
position: Qt.vector3d(0, 400, 600)
eulerRotation.x: -30
clipFar: 2000
}
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.ShadowMapQualityHigh
visible: checkBox1.checked
castsShadow: checkBoxShadows.checked
brightness: slider1.sliderValue
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
}
}
}
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: checkBox2.checked
castsShadow: checkBoxShadows.checked
brightness: slider2.sliderValue
SequentialAnimation on x {
loops: Animation.Infinite
NumberAnimation {
to: 400
duration: 2000
easing.type: Easing.InOutQuad
}
NumberAnimation {
to: 0
duration: 2000
easing.type: Easing.InOutQuad
}
}
}
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: checkBox4.checked
castsShadow: checkBoxShadows.checked
brightness: slider4.sliderValue
coneAngle: 50
innerConeAngle: 30
PropertyAnimation on eulerRotation.y {
loops: Animation.Infinite
from: 0
to: -360
duration: 10000
}
}
Model {
source: "#Rectangle"
y: -200
scale: Qt.vector3d(15, 15, 15)
eulerRotation.x: -90
materials: [
DefaultMaterial {
diffuseColor: Qt.rgba(0.8, 0.6, 0.4, 1.0)
}
]
}
Model {
source: "#Rectangle"
z: -400
scale: Qt.vector3d(15, 15, 15)
materials: [
DefaultMaterial {
diffuseColor: Qt.rgba(0.8, 0.8, 0.9, 1.0)
}
]
}
RotatingTeaPot {
visible: !checkBoxCustomMaterial.checked
material: DefaultMaterial {
diffuseColor: Qt.rgba(0.9, 0.9, 0.9, 1.0)
}
animate: checkBoxAnimate.checked
}
RotatingTeaPot {
visible: checkBoxCustomMaterial.checked
material: CustomMaterial {
vertexShader: "custom.vert"
property real uAmplitude: 0.5
property real uTime: 0.0
SequentialAnimation on uTime {
loops: -1
NumberAnimation { from: 0.0; to: 10.0; duration: 10000 }
NumberAnimation { from: 10.0; to: 0.0; duration: 10000 }
}
}
animate: checkBoxAnimate.checked
}
Model {
source: "#Cube"
position: light1.position
rotation: light1.rotation
property real size: slider1.highlight ? 0.2 : 0.1
scale: Qt.vector3d(size, size, size)
materials: [
DefaultMaterial {
diffuseColor: light1.color
opacity: 0.4
}
]
}
Model {
source: "#Cube"
position: light2.position
rotation: light2.rotation
property real size: slider2.highlight ? 0.2 : 0.1
scale: Qt.vector3d(size, size, size)
materials: [
DefaultMaterial {
diffuseColor: light2.color
opacity: 0.4
}
]
}
Model {
source: "#Cube"
position: light4.position
rotation: light4.rotation
property real size: slider4.highlight ? 0.2 : 0.1
scale: Qt.vector3d(size, size, size)
materials: [
DefaultMaterial {
diffuseColor: light4.color
opacity: 0.4
}
]
}
}
Frame {
anchors.top: parent.top
anchors.topMargin: 20
anchors.left: parent.left
anchors.leftMargin: 10
background: Rectangle {
color: "#e0e0e0"
border.color: "#000000"
border.width: 1
opacity: 0.8
}
Column {
id: settingsArea
CustomCheckBox {
id: checkBoxShadows
text: qsTr("Enable Shadows")
checked: true
}
Item { width: 1; height: 20 }
CustomCheckBox {
id: checkBoxAnimate
text: qsTr("Rotate Teapot")
checked: true
}
Item { width: 1; height: 20 }
CustomCheckBox {
id: checkBoxCustomMaterial
text: qsTr("Custom Material")
checked: false
}
Item { width: 1; height: 40 }
CustomCheckBox {
id: checkBox1
text: qsTr("Directional Light")
checked: true
}
CustomSlider {
id: slider1
sliderValue: 0.5
fromValue: 0
toValue: 1
}
Item { width: 1; height: 40 }
CustomCheckBox {
id: checkBox2
text: qsTr("Point Light")
checked: false
}
CustomSlider {
id: slider2
sliderValue: 6
fromValue: 0
toValue: 10
}
Item { width: 1; height: 40 }
CustomCheckBox {
id: checkBox4
text: qsTr("Spot Light")
checked: false
}
CustomSlider {
id: slider4
sliderValue: 10
fromValue: 0
toValue: 30
}