Qt Quick 3D - Particles 3D Testbed Example▲
Sélectionnez
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import
QtQuick
import
QtQuick3D
import
QtQuick3D.Particles3D
import
QtQuick.Controls
Item
{
id
:
mainWindow
property
int
smokeAmount
:
20
property
int
explosionAmount
:
100
anchors.fill
:
parent
View3D {
id
:
view3D
anchors.fill
:
parent
camera
:
camera
environment
:
SceneEnvironment {
clearColor
:
"#000000"
backgroundMode
:
SceneEnvironment.Color
antialiasingMode
:
settings.antialiasingMode
antialiasingQuality
:
settings.antialiasingQuality
}
PerspectiveCamera {
id
:
camera
position
:
Qt.vector3d(0
, 100
, 600
)
}
PointLight {
id
:
light1
position
:
Qt.vector3d(0
, 400
, 100
)
brightness
:
5
ambientColor
:
Qt.rgba(0.4, 0.3, 0.3, 1.0)
}
ParticleSystem3D {
id
:
psystem
SpriteParticle3D {
id
:
spriteParticle
sprite
:
Texture {
source
:
"images/sphere.png"
}
maxAmount
:
3
color
:
"#ffff80"
colorTable
:
Texture {
source
:
"images/color_table5.png"
}
particleScale
:
40.0
fadeInEffect
:
SpriteParticle3D.FadeNone
fadeOutEffect
:
SpriteParticle3D.FadeNone
}
SpriteParticle3D {
id
:
spriteTrailParticle
sprite
:
Texture {
source
:
"images/sphere.png"
}
maxAmount
:
1000
fadeInDuration
:
500
fadeOutDuration
:
500
fadeInEffect
:
SpriteParticle3D.FadeScale
fadeOutEffect
:
SpriteParticle3D.FadeScale
particleScale
:
10.0
colorTable
:
Texture {
source
:
"images/color_table3.png"
}
lights
:
light1
}
SpriteParticle3D {
id
:
explosionParticle
sprite
:
Texture {
source
:
"images/star3.png"
}
maxAmount
:
1000
fadeInEffect
:
SpriteParticle3D.FadeScale
fadeInDuration
:
100
fadeOutDuration
:
500
particleScale
:
10.0
colorTable
:
Texture {
source
:
"images/color_table3.png"
}
lights
:
light1
}
SpriteParticle3D {
id
:
smokeParticle
sprite
:
Texture {
source
:
"images/explosion_01_strip13.png"
}
maxAmount
:
1000
spriteSequence
:
SpriteSequence3D {
frameCount
:
13
interpolate
:
true
}
billboard
:
true
color
:
"#2fffffff"
colorVariation
:
Qt.vector4d(0.5, 0.5, 0.5, 0.1)
unifiedColorVariation
:
true
fadeOutEffect
:
Particle3D.FadeOpacity
fadeOutDuration
:
2000
lights
:
light1
}
ParticleEmitter3D {
particle
:
spriteParticle
position
:
Qt.vector3d(0
, -
100
, 0
)
scale
:
Qt.vector3d(1
, 1
, 1
)
shape
:
ParticleShape3D {
type
:
ParticleShape3D.Cube
}
particleScaleVariation
:
0.2
particleEndScale
:
1.5
particleEndScaleVariation
:
0.5
velocity
:
VectorDirection3D {
direction
:
Qt.vector3d(0
, 400
, 0
)
directionVariation
:
Qt.vector3d(40
, 40
, 0
)
}
emitRate
:
1
lifeSpan
:
2500
lifeSpanVariation
:
500
depthBias
:
-
10
}
TrailEmitter3D {
id
:
spriteTrailEmitter
particle
:
spriteTrailParticle
follow
:
spriteParticle
particleScale
:
2.0
particleScaleVariation
:
0.5
velocity
:
VectorDirection3D {
direction
:
Qt.vector3d(0
, -
10
, 0
)
directionVariation
:
Qt.vector3d(2
, 2
, 0
)
}
emitRate
:
100
lifeSpan
:
2000
lifeSpanVariation
:
500
}
TrailEmitter3D {
id
:
spriteSmokeTrailEmitter
particle
:
smokeParticle
follow
:
spriteParticle
particleScale
:
8
particleScaleVariation
:
4
particleEndScale
:
45
particleEndScaleVariation
:
15
particleRotationVariation
:
Qt.vector3d(0
, 0
, 180
)
particleRotationVelocityVariation
:
Qt.vector3d(0
, 0
, 40
)
emitRate
:
0
lifeSpan
:
3000
lifeSpanVariation
:
1000
velocity
:
VectorDirection3D {
direction
:
Qt.vector3d(0
, 0
, 0
)
directionVariation
:
Qt.vector3d(smokeAmount *
0.6, smokeAmount *
0.6, 0
)
}
depthBias
:
-
20
emitBursts
:
[
DynamicBurst3D {
enabled
:
checkBoxStartBurst.checked
triggerMode
:
DynamicBurst3D.TriggerStart
amount
:
smokeAmount
amountVariation
:
smokeAmount *
0.4
}
,
DynamicBurst3D {
enabled
:
checkBoxEndBurst.checked
triggerMode
:
DynamicBurst3D.TriggerEnd
amount
:
smokeAmount
amountVariation
:
smokeAmount *
0.4
}
]
}
TrailEmitter3D {
particle
:
explosionParticle
follow
:
spriteParticle
particleScale
:
1.0
particleScaleVariation
:
0.8
particleRotationVariation
:
Qt.vector3d(0
, 0
, 180
)
particleRotationVelocityVariation
:
Qt.vector3d(0
, 0
, 40
)
emitRate
:
0
lifeSpan
:
3000
lifeSpanVariation
:
1000
velocity
:
TargetDirection3D {
position
:
Qt.vector3d(0
, 300
, 0
)
positionVariation
:
Qt.vector3d(100
, 100
, 0
)
normalized
:
true
magnitude
:
20
+
explosionAmount *
0.2
magnitudeVariation
:
magnitude *
0.5
}
emitBursts
:
[
DynamicBurst3D {
enabled
:
checkBoxExplosionBurst.checked
triggerMode
:
DynamicBurst3D.TriggerEnd
amount
:
explosionAmount
amountVariation
:
explosionAmount *
0.4
}
]
}
Gravity3D {
direction
:
Qt.vector3d(0
, 1
, 0
)
magnitude
:
-
200
particles
:
[spriteParticle]
}
Gravity3D {
direction
:
Qt.vector3d(0
, 1
, 0
)
magnitude
:
-
40
particles
:
[explosionParticle]
}
}
}
SettingsView {
CustomCheckBox {
id
:
checkBoxStartBurst
text
:
"Smoke burst at start"
checked
:
true
}
CustomCheckBox {
id
:
checkBoxEndBurst
text
:
"Smoke burst at end"
checked
:
true
}
CustomLabel {
text
:
"Smoke amount"
}
CustomSlider {
id
:
smokeSlider
sliderValue
:
smokeAmount
fromValue
:
5
toValue
:
50
onSliderValueChanged
:
smokeAmount =
sliderValue;
}
CustomCheckBox {
id
:
checkBoxExplosionBurst
text
:
"Explosion burst at end"
checked
:
true
}
CustomLabel {
text
:
"Explosion amount"
}
CustomSlider {
id
:
explosionSlider
sliderValue
:
explosionAmount
fromValue
:
20
toValue
:
200
onSliderValueChanged
:
explosionAmount =
sliderValue;
}
}
LoggingView {
anchors.bottom
:
parent.bottom
particleSystems
:
[psystem]
}
}