Qt Quick 3D - Particles 3D Testbed Example
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D
import QtQuick3D.Particles3D
Item {
id: mainWindow
anchors.fill: parent
property real fontSize: width * 0.012
View3D {
id: view
anchors.fill: parent
environment: SceneEnvironment {
clearColor: "#202020"
backgroundMode: SceneEnvironment.Color
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
}
PerspectiveCamera {
id: camera
property real cameraAnim: 0
SequentialAnimation on cameraAnim {
running: true
loops: Animation.Infinite
NumberAnimation {
to: 1
duration: 4000
easing.type: Easing.InOutQuad
}
NumberAnimation {
to: 0
duration: 4000
easing.type: Easing.InOutQuad
}
}
position: Qt.vector3d(500 * Math.sin(cameraAnim * Math.PI * 2), 0, 500 * Math.cos(cameraAnim * Math.PI * 2))
eulerRotation: Qt.vector3d(0, cameraAnim * 360, 0)
}
Timer {
running: true
repeat: true
interval: 4000
onTriggered: {
if (shape1.delegate === cube) {
shape1.delegate = suzanne;
shape2.delegate = suzanne;
} else if (shape1.delegate === suzanne) {
shape1.delegate = cube;
shape2.delegate = cube;
}
}
}
ParticleSystem3D {
id: psystem
SpriteParticle3D {
id: particleFire
sprite: Texture {
source: "images/sphere.png"
}
colorTable: Texture {
source: "images/colorTable.png"
}
maxAmount: 6000
color: "#ffffff"
billboard: true
blendMode: SpriteParticle3D.Screen
}
Component {
id: suzanne
Model {
source: "meshes/suzanne.mesh"
scale: Qt.vector3d(100, 100, 100)
materials: DefaultMaterial { diffuseColor: "red" }
}
}
Component {
id: cube
Model {
source: "#Cube"
scale: Qt.vector3d(2, 2, 2)
materials: DefaultMaterial { diffuseColor: "red" }
}
}
ParticleEmitter3D {
particle: particleFire
position: Qt.vector3d(-150, 0, 0)
particleScale: 1
particleScaleVariation: 1
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 60, 0)
directionVariation: Qt.vector3d(6, 6, 6)
}
emitRate: 3000
lifeSpan: 1000
shape: ParticleModelShape3D {
id: shape1
delegate: suzanne
}
Node {
x: -30
y: 150
Text {
anchors.verticalCenter: parent.verticalCenter
text: "Filled"
font.pointSize: mainWindow.fontSize
color: "#ffffff"
}
}
}
ParticleEmitter3D {
particle: particleFire
position: Qt.vector3d(150, 0, 0)
particleScale: 1
particleScaleVariation: 1
velocity: VectorDirection3D {
direction: Qt.vector3d(0, 60, 0)
directionVariation: Qt.vector3d(6, 6, 6)
}
emitRate: 3000
lifeSpan: 1000
shape: ParticleModelShape3D {
id: shape2
delegate: suzanne
fill: false
}
Node {
x: -30
y: 150
Text {
anchors.verticalCenter: parent.verticalCenter
text: "Surface"
font.pointSize: mainWindow.fontSize
color: "#ffffff"
}
}
}
}
}
LoggingView {
anchors.bottom: parent.bottom
particleSystems: [psystem]
}
}