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
QtQuick.Controls
Item
{
id
:
root
width
:
settingsDrawer.width
height
:
parent.height
property
int
timeSlicingIndex
:
timeSlicingComboBox.currentIndex
property
int
refreshModeIndex
:
refreshModeComboBox.currentIndex
property
int
qualityIndex
:
qualityComboBox.currentIndex
property
vector3d
probeSize
:
Qt.vector3d(probeSizeXSlider.value, probeSizeYSlider.value, probeSizeZSlider.value)
property
vector3d
probePosition
:
Qt.vector3d(probePositionXSlider.value, probePositionYSlider.value, probePositionZSlider.value)
property
bool
probeParallaxCorrection
:
parallaxCheckBox.checked
property
real
sphereRoughness
:
materialRoughnessSlider.value
property
bool
sphereReceivesReflection
:
sphereReceivesReflectionsCheckBox.checked
property
bool
floorReceivesReflection
:
floorReceivesReflectionsCheckBox.checked
property
bool
spriteParticlesEnabled
:
particleSystemSpriteCheckBox.checked
property
bool
modelParticlesEnabled
:
particleSystemModelCheckBox.checked
property
real
iconSize
:
50
Button
{
x
:
settingsDrawer.visible ? (settingsDrawer.x +
settingsDrawer.width) :
0
anchors.top
:
parent.top
width
:
root.iconSize
height
:
width
icon.width
:
width
*
0.3
icon.height
:
height
*
0.3
icon.source
:
"res/icon_settings.png"
icon.color
:
"transparent"
background
:
Rectangle
{
color
:
"transparent"
}
onClicked
: {
settingsDrawer.
visible =
!
settingsDrawer.
visible;
}
}
Drawer {
id
:
settingsDrawer
edge
:
Qt.LeftEdge
interactive
:
false
modal
:
false
enter
:
Transition
{
NumberAnimation
{
property
:
"position"
to
:
1.0
duration
:
400
easing.type
:
Easing.InOutQuad
}
}
exit
:
Transition
{
NumberAnimation
{
property
:
"position"
to
:
0.0
duration
:
400
easing.type
:
Easing.InOutQuad
}
}
ScrollView
{
anchors.fill
:
parent
ScrollBar.vertical.policy
:
ScrollBar.AlwaysOn
padding
:
10
background
:
Rectangle
{
color
:
"white"
}
Flickable
{
clip
:
true
contentWidth
:
settingsArea.width
contentHeight
:
settingsArea.height
Column
{
id
:
settingsArea
spacing
:
5
Text
{
anchors.horizontalCenter
:
parent.horizontalCenter
text
:
"Reflection Map"
font.pixelSize
:
14
}
Item
{
width
:
1
; height
:
10
}
Text
{
text
:
"Time Slicing"
}
ComboBox
{
id
:
timeSlicingComboBox
width
:
200
model
:
[ "None"
, "All Faces At Once"
, "Individual Faces"
]
}
Text
{
text
:
"Refresh Mode"
}
ComboBox
{
id
:
refreshModeComboBox
width
:
200
model
:
[ "Every Frame"
, "First Frame"
]
}
Text
{
text
:
"Reflection Map Quality"
}
ComboBox
{
id
:
qualityComboBox
width
:
200
model
:
[ "Very Low"
, "Low"
, "Medium"
, "High"
, "Very High"
]
}
Item
{
width
:
1
; height
:
10
}
Text
{
anchors.horizontalCenter
:
parent.horizontalCenter
text
:
"Floor Reflection Probe"
font.pixelSize
:
14
}
Item
{
width
:
1
; height
:
10
}
CheckBox
{
id
:
parallaxCheckBox
checked
:
true
text
:
qsTr("Parallax Correction"
)
}
Text
{
text
:
"Box Size ("
+
probeSizeXSlider.value +
", "
+
probeSizeYSlider.value +
", "
+
probeSizeZSlider.value +
")"
}
Slider
{
id
:
probeSizeXSlider
from
:
0
value
:
1000
to
:
1000
stepSize
:
1
}
Slider
{
id
:
probeSizeYSlider
from
:
0
value
:
950
to
:
1000
stepSize
:
1
}
Slider
{
id
:
probeSizeZSlider
from
:
0
value
:
650
to
:
1000
stepSize
:
1
}
Text
{
text
:
"Position ("
+
probePositionXSlider.value +
", "
+
probePositionYSlider.value +
", "
+
probePositionZSlider.value +
")"
}
Slider
{
id
:
probePositionXSlider
from
:
0
value
:
0
to
:
500
stepSize
:
1
}
Slider
{
id
:
probePositionYSlider
from
:
0
value
:
0
to
:
500
stepSize
:
1
}
Slider
{
id
:
probePositionZSlider
from
:
0
value
:
0
to
:
500
stepSize
:
1
}
Item
{
width
:
1
; height
:
10
}
Text
{
anchors.horizontalCenter
:
parent.horizontalCenter
text
:
"Particles"
font.pixelSize
:
14
}
CheckBox
{
id
:
particleSystemSpriteCheckBox
checked
:
false
text
:
qsTr("Sprite Particles"
)
}
CheckBox
{
id
:
particleSystemModelCheckBox
checked
:
false
text
:
qsTr("Model Particles"
)
}
Item
{
width
:
1
; height
:
10
}
Text
{
anchors.horizontalCenter
:
parent.horizontalCenter
text
:
"Model"
font.pixelSize
:
14
}
Item
{
width
:
1
; height
:
10
}
Text
{
text
:
"Sphere Roughness : "
+
materialRoughnessSlider.value.toFixed(2
);
}
Slider
{
id
:
materialRoughnessSlider
from
:
0
to
:
1.0
value
:
0.1
}
CheckBox
{
id
:
sphereReceivesReflectionsCheckBox
checked
:
true
text
:
qsTr("Sphere receives reflections"
)
}
CheckBox
{
id
:
floorReceivesReflectionsCheckBox
checked
:
true
text
:
qsTr("Floor receives reflections"
)
}
}
}
}
}
}