Qt Quick 3D - Reflection Probes Example▲
Sélectionnez
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import
QtQuick
import
QtQuick3D
import
QtQuick3D.Particles3D
import
QtQuick3D.Helpers
import
QtQuick.Controls
Window
{
id
:
window
width
:
1024
height
:
768
visible
:
true
title
:
qsTr("Reflection Probes"
)
View3D {
id
:
view
anchors.fill
:
parent
environment
:
SceneEnvironment {
clearColor
:
window.color
backgroundMode
:
SceneEnvironment.SkyBox
lightProbe
:
Texture {
source
:
"res/OpenfootageNET_lowerAustria01-1024.hdr"
}
probeOrientation
:
Qt.vector3d(0
, -
90
, 0
)
}
PerspectiveCamera {
id
:
camera
position
:
Qt.vector3d(-
50
, 700
, 475
)
eulerRotation.x
:
-
50
}
DirectionalLight {
}
Model {
property
real
angle
source
:
"#Sphere"
x
:
Math.cos(angle
) *
100
z
:
Math.sin(angle
) *
100
y
:
300
receivesReflections
:
settingsPanel.sphereReceivesReflection
materials
:
PrincipledMaterial {
metalness
:
1.0
roughness
:
settingsPanel.sphereRoughness
}
NumberAnimation
on
angle
{
from
:
0
to
:
Math.PI *
2
duration
:
8000
loops
:
Animation.Infinite
}
ReflectionProbe {
objectName
:
"sphereReflProbe"
timeSlicing
: {
if (
settingsPanel.
timeSlicingIndex ==
0
) ReflectionProbe.
None
else if (
settingsPanel.
timeSlicingIndex ==
1
) ReflectionProbe.
AllFacesAtOnce
else ReflectionProbe.
IndividualFaces
}
refreshMode
: {
if (
settingsPanel.
refreshModeIndex ==
0
) ReflectionProbe.
EveryFrame
else ReflectionProbe.
FirstFrame
}
quality
: {
if (
settingsPanel.
qualityIndex ==
0
) ReflectionProbe.
VeryLow
else if (
settingsPanel.
qualityIndex ==
1
) ReflectionProbe.
Low
else if (
settingsPanel.
qualityIndex ==
2
) ReflectionProbe.
Medium
else if (
settingsPanel.
qualityIndex ==
3
) ReflectionProbe.
High
else ReflectionProbe.
VeryHigh
}
boxSize
:
Qt.vector3d(300
, 300
, 300
)
}
}
Model {
position
:
Qt.vector3d(200
, 300
, 0
)
source
:
"#Sphere"
materials
:
PrincipledMaterial {
baseColor
:
"green"
}
}
Model {
position
:
Qt.vector3d(-
200
, 300
, 0
)
source
:
"#Sphere"
materials
:
PrincipledMaterial {
baseColor
:
"green"
}
}
Model {
position
:
Qt.vector3d(0
, 200
, -
285
)
scale
:
Qt.vector3d(6
, 4
, 0.3)
source
:
"#Cube"
materials
:
PrincipledMaterial {
baseColor
:
"yellow"
roughness
:
0.1
metalness
:
1.0
}
}
Model {
scale
:
Qt.vector3d(6
, 0.1, 6
)
source
:
"#Cube"
receivesReflections
:
settingsPanel.floorReceivesReflection
materials
:
PrincipledMaterial {
baseColor
:
"lightBlue"
roughness
:
0.1
metalness
:
1.0
}
}
ReflectionProbe {
objectName
:
"reflProbe"
position
:
settingsPanel.probePosition
timeSlicing
: {
if (
settingsPanel.
timeSlicingIndex ==
0
) ReflectionProbe.
None
else if (
settingsPanel.
timeSlicingIndex ==
1
) ReflectionProbe.
AllFacesAtOnce
else ReflectionProbe.
IndividualFaces
}
refreshMode
: {
if (
settingsPanel.
refreshModeIndex ==
0
) ReflectionProbe.
EveryFrame
else ReflectionProbe.
FirstFrame
}
quality
: {
if (
settingsPanel.
qualityIndex ==
0
) ReflectionProbe.
VeryLow
else if (
settingsPanel.
qualityIndex ==
1
) ReflectionProbe.
Low
else if (
settingsPanel.
qualityIndex ==
2
) ReflectionProbe.
Medium
else if (
settingsPanel.
qualityIndex ==
3
) ReflectionProbe.
High
else ReflectionProbe.
VeryHigh
}
parallaxCorrection
:
settingsPanel.probeParallaxCorrection
boxSize
:
settingsPanel.probeSize
}
ParticleSystem3D {
position
:
Qt.vector3d(0
, 300
, 0
)
SpriteParticle3D {
id
:
snowFlakeParticle
sprite
:
Texture {
source
:
"res/snowflake.png"
}
maxAmount
:
100
particleScale
:
20.0
fadeOutDuration
:
500
billboard
:
true
}
ParticleEmitter3D {
enabled
:
settingsPanel.spriteParticlesEnabled
particle
:
snowFlakeParticle
velocity
:
VectorDirection3D {
direction
:
Qt.vector3d(100
, 200
, 0
)
directionVariation
:
Qt.vector3d(20
, 20
, 20
)
}
particleScaleVariation
:
0.4
emitRate
:
50
lifeSpan
:
4000
}
Gravity3D {
magnitude
:
100
}
}
ParticleSystem3D {
position
:
Qt.vector3d(0
, 300
, 0
)
Component
{
id
:
particleComponent
Model {
source
:
"#Sphere"
scale
:
Qt.vector3d(0.8, 0.8, 0.8)
receivesReflections
:
true
materials
:
PrincipledMaterial {
baseColor
:
"red"
roughness
:
0.1
metalness
:
1.0
}
}
}
ModelParticle3D {
id
:
particleRed
delegate
:
particleComponent
maxAmount
:
10
}
ParticleEmitter3D {
enabled
:
settingsPanel.modelParticlesEnabled
particle
:
particleRed
velocity
:
VectorDirection3D {
direction
:
Qt.vector3d(-
100
, 200
, 0
)
}
emitRate
:
1
lifeSpan
:
4000
}
Gravity3D {
magnitude
:
100
}
}
}
SettingsPanel {
id
:
settingsPanel
iconSize
:
16
+
Math.max(window.width, window.height) *
0.05
}
Item
{
width
:
debugViewToggleText.implicitWidth
height
:
debugViewToggleText.implicitHeight
anchors.right
:
parent.right
Label
{
id
:
debugViewToggleText
text
:
"Click here "
+
(dbg.visible ? "to hide DebugView"
:
"for DebugView"
)
color
:
"white"
anchors.right
:
parent.right
anchors.top
:
parent.top
}
MouseArea
{
anchors.fill
:
parent
onClicked
:
dbg.visible =
!
dbg.visible
DebugView {
y
:
debugViewToggleText.height *
2
anchors.right
:
parent.right
source
:
view
id
:
dbg
visible
:
false
}
}
}
}