Revision control

Copy as Markdown

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtQuick3D
import QtQuick3D.Particles3D
import QtQuick3D.Helpers
import QtQuick.Controls
Window {
id: window
width: 640
height: 640
visible: true
color: "black"
WasdController {
controlledObject: camera
}
View3D {
id: view
anchors.fill: parent
environment: SceneEnvironment {
clearColor: window.color
backgroundMode: SceneEnvironment.SkyBox
lightProbe: Texture {
}
probeOrientation: Qt.vector3d(0, -90, 0)
}
PerspectiveCamera {
id: camera
position: Qt.vector3d(0, 200, 400)
eulerRotation.x: -30
}
DirectionalLight {
eulerRotation.x: -60
castsShadow: true
}
Model {
property real angle: 0
source: "#Sphere"
x: Math.cos(angle) * 100
z: Math.sin(angle) * 100
receivesReflections: true
NumberAnimation on angle {
from: 0
to: Math.PI * 2
duration: 8000
loops: Animation.Infinite
}
materials: PrincipledMaterial {
metalness: 1
roughness: 0
SequentialAnimation on roughness {
loops: Animation.Infinite
NumberAnimation {
from: 0
to: 1.0
duration: 5000
}
NumberAnimation {
from: 1
to: 0.0
duration: 5000
}
}
}
ReflectionProbe {
id: probe
timeSlicing: {
if (comboTimeSlicing.currentIndex === 0) ReflectionProbe.None
else if (comboTimeSlicing.currentIndex === 1) ReflectionProbe.AllFacesAtOnce
else ReflectionProbe.IndividualFaces
}
refreshMode: {
if (comboRefreshMode.currentIndex === 0) ReflectionProbe.EveryFrame
else ReflectionProbe.FirstFrame
}
quality: {
if (comboQuality.currentIndex === 0) ReflectionProbe.VeryLow
else if (comboQuality.currentIndex === 1) ReflectionProbe.Low
else if (comboQuality.currentIndex === 2) ReflectionProbe.Medium
else if (comboQuality.currentIndex === 3) ReflectionProbe.High
else ReflectionProbe.VeryHigh
}
parallaxCorrection: checkParallax.checked
boxSize: Qt.vector3d(sliderBoxX.value, sliderBoxY.value, sliderBoxZ.value)
texture: {
if (comboTexture.currentIndex === 0) null
else if (comboTexture.currentIndex === 1) ktxCubeTexture
else if (comboTexture.currentIndex === 2) pngCubeTexture
else pngTexture
}
}
}
CubeMapTexture {
id: ktxCubeTexture
source: "cubemap_bc1.ktx"
}
CubeMapTexture {
id: pngCubeTexture
source: "qt_logo.png;qt_logo.png;qt_logo.png;qt_logo.png;qt_logo.png;qt_logo.png"
}
ParticleSystem3D {
position: Qt.vector3d(200, 0, 0)
SpriteParticle3D {
id: starParticle
sprite: Texture {
source: "snowflake.png"
}
maxAmount: 200
color: "#ffff00"
particleScale: 20.0
fadeOutDuration: 500
billboard: true
}
ParticleEmitter3D {
particle: starParticle
velocity: VectorDirection3D {
direction: Qt.vector3d(100, 200, 0)
directionVariation: Qt.vector3d(20, 20, 20)
}
particleScaleVariation: 0.4
emitRate: 50
lifeSpan: 4000
}
Gravity3D {
magnitude: 100
}
}
Model {
source: "#Sphere"
materials: DefaultMaterial {}
}
Model {
position: Qt.vector3d(0, 0, 200)
source: "#Sphere"
materials: DefaultMaterial {}
}
Model {
source: "#Cube"
materials: [
CustomMaterial {
shadingMode: CustomMaterial.Shaded
fragmentShader: "material_simple.frag"
property color uDiffuse: "fuchsia"
property real uSpecular: 1.0
}
]
//materials: PrincipledMaterial {}
y: -200
scale: Qt.vector3d(10, 1, 10)
}
}
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
ComboBox {
id: comboTimeSlicing
width: 200
model: [ "None", "All Faces At Once", "Individual Faces" ]
}
ComboBox {
id: comboRefreshMode
width: 200
model: [ "Every Frame", "First Frame" ]
}
ComboBox {
id: comboQuality
width: 200
model: [ "Very Low", "Low", "Medium", "High", "Very High" ]
}
CheckBox {
id: checkParallax
checked: false
text: qsTr("Parallax")
}
Slider {
id: sliderBoxX
from: 0
value: 0
to: 1000
}
Slider {
id: sliderBoxY
from: 0
value: 0
to: 1000
}
Slider {
id: sliderBoxZ
from: 0
value: 0
to: 1000
}
Button {
text: "Schedule Update"
onClicked: probe.scheduleUpdate()
}
ComboBox {
id: comboTexture
width: 200
model: [ "No texture", "KtxCubeMapTexture", "PngCubeMapTexture" ]
}
}
}
DebugView {
anchors.right: parent.right
source: view
}
}