diff options
Diffstat (limited to 'examples/quick3d/particles3d/EmitterCustomShapes.qml')
-rw-r--r-- | examples/quick3d/particles3d/EmitterCustomShapes.qml | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/examples/quick3d/particles3d/EmitterCustomShapes.qml b/examples/quick3d/particles3d/EmitterCustomShapes.qml new file mode 100644 index 00000000..349f95ab --- /dev/null +++ b/examples/quick3d/particles3d/EmitterCustomShapes.qml @@ -0,0 +1,217 @@ +// Copyright (C) 2023 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 + + View3D { + anchors.fill: parent + + environment: SceneEnvironment { + clearColor: "#000000" + backgroundMode: SceneEnvironment.Color + antialiasingMode: AppSettings.antialiasingMode + antialiasingQuality: AppSettings.antialiasingQuality + } + + PerspectiveCamera { + id: camera + property real cameraAnim: 0 + NumberAnimation { + target: camera + property: "cameraAnim" + running: true + loops: Animation.Infinite + from: 0 + to: 2 * Math.PI + duration: 40000 + } + position: Qt.vector3d(Math.sin(cameraAnim * 3.0) * 400, 200, 600 + Math.cos(cameraAnim) * 200) + eulerRotation: Qt.vector3d(-20, Math.sin(cameraAnim * 3.0) * 30, 0) + } + + PointLight { + position: Qt.vector3d(0, 400, 0) + brightness: 10 + ambientColor: Qt.rgba(0.3, 0.3, 0.3, 1.0) + } + + // Background stars + ParticleSystem3D { + id: psystem2 + startTime: 10000 + SpriteParticle3D { + id: particle3 + sprite: Texture { + source: "images/star3.png" + } + maxAmount: 1000 + color: "#40ffffff" + colorVariation: Qt.vector4d(0.1, 0.1, 0.1, 0.2) + fadeInEffect: SpriteParticle3D.FadeScale + fadeInDuration: 2000 + fadeOutEffect: SpriteParticle3D.FadeScale + fadeOutDuration: 2000 + alignMode: SpriteParticle3D.AlignTowardsTarget + alignTargetPosition: camera.position + } + ParticleEmitter3D { + particle: particle3 + shape: ParticleShape3D { + fill: true + type: ParticleShape3D.Sphere + } + position: Qt.vector3d(0, -500, -400) + scale: Qt.vector3d(30, 30, 15) + emitRate: 100 + lifeSpan: 10000 + particleRotationVariation: Qt.vector3d(0, 0, 180) + particleRotationVelocityVariation: Qt.vector3d(0, 0, 50) + particleScale: 5.0 + particleScaleVariation: 3.0 + velocity: VectorDirection3D { + direction: Qt.vector3d(0, 0, 0) + directionVariation: Qt.vector3d(10, 10, 10) + } + } + } + + ParticleSystem3D { + id: psystem + running: false + SequentialAnimation on time { + loops: Animation.Infinite + PauseAnimation { + duration: 1500 + } + NumberAnimation { + to: 5000 + duration: 5000 + easing.type: Easing.InOutQuad + } + PauseAnimation { + duration: 1500 + } + NumberAnimation { + to: 0 + duration: 5000 + easing.type: Easing.InOutQuad + } + } + + SpriteParticle3D { + id: particle1 + sprite: Texture { + source: "images/star3.png" + } + maxAmount: 4096 + colorTable: Texture { + source: "images/color_table5.png" + } + color: "#d0ffffff" + colorVariation: Qt.vector4d(0.0, 0.0, 0.0, 0.4) + particleScale: 15.0 + billboard: true + fadeInEffect: SpriteParticle3D.FadeNone + fadeOutEffect: SpriteParticle3D.FadeNone + } + + SpriteParticle3D { + id: particle2 + sprite: Texture { + source: "images/dot.png" + } + maxAmount: 4096 + colorTable: Texture { + source: "images/color_table4.png" + } + color: "#60ffffff" + colorVariation: Qt.vector4d(0.0, 0.0, 0.0, 0.4) + particleScale: 6.0 + billboard: true + fadeInEffect: SpriteParticle3D.FadeNone + fadeOutEffect: SpriteParticle3D.FadeNone + } + + ParticleEmitter3D { + particle: particle1 + scale: Qt.vector3d(5.0, 5.0, 5.0) + shape: ParticleCustomShape3D { + source: "data/qt_logo_in_4096.cbor" + } + lifeSpan: 5001 + emitBursts: [ + EmitBurst3D { + time: 0 + amount: 4096 + } + ] + depthBias: -200 + particleRotationVariation: Qt.vector3d(0, 0, 180) + particleRotationVelocityVariation: Qt.vector3d(80, 80, 80) + particleScaleVariation: 0.5 + particleEndScale: 4.0 + particleEndScaleVariation: 2.0 + velocity: VectorDirection3D { + direction: Qt.vector3d(-150, 100, 0) + directionVariation: Qt.vector3d(150, 100, 100) + } + } + + ParticleEmitter3D { + particle: particle2 + scale: Qt.vector3d(5.0, 5.0, 5.0) + shape: ParticleCustomShape3D { + source: "data/qt_logo_out_4096.cbor" + } + lifeSpan: 5001 + emitBursts: [ + EmitBurst3D { + time: 0 + amount: 4096 + } + ] + particleScale: 2.0 + particleEndScale: 1.0 + particleScaleVariation: 1.5 + particleEndScaleVariation: 0.8 + velocity: VectorDirection3D { + direction: Qt.vector3d(0, 200, 0) + directionVariation: Qt.vector3d(50, 50, 50) + } + } + + Attractor3D { + particles: [particle1] + position: Qt.vector3d(-200, 0, 0) + scale: Qt.vector3d(4.0, 4.0, 4.0) + shape: ParticleCustomShape3D { + source: "data/heart_4096.cbor" + randomizeData: true + } + duration: 4000 + durationVariation: 1000 + } + Attractor3D { + particles: [particle2] + position: Qt.vector3d(200, 0, 0) + scale: Qt.vector3d(6.0, 6.0, 6.0) + shape: ParticleCustomShape3D { + source: "data/qt_logo_in_4096.cbor" + } + duration: 4000 + durationVariation: 1000 + } + } + } + + LoggingView { + anchors.bottom: parent.bottom + particleSystems: [psystem, psystem2] + } +} |