Sur cette page

Qt Quick 3D - Exemple de banc d'essai « Particles 3D »

Cet exemple montre comment utiliser le module Particles3D d'Qt Quick.

Quatre fenêtres présentant différents exemples de systèmes de particules

Cet exemple présente différentes façons d’utiliser les fonctionnalités du module Particles 3D d’ QtQuick3D.Particles3D. Le banc d’essai Particles contient une série d’exemples, certains mettant l’accent sur une fonctionnalité particulière et d’autres combinant plusieurs fonctionnalités pour obtenir l’aspect souhaité.

Fonctionnalités communes

Les exemples du banc d’essai partagent certaines fonctionnalités communes. Pour quitter l’exemple et revenir à l’écran de lancement, appuyez sur la flèche de retour située dans le coin supérieur gauche.

Dans le coin inférieur droit de chaque exemple se trouve une icône qui ouvre la vue de journalisation. Depuis cette vue, vous pouvez consulter différentes données de débogage concernant les particules. Chaque « ParticleSystem3D » dispose de sa propre ligne affichant ses données d’ ParticleSystem3DLogging.

Statistiques et indicateurs de performance des systèmes de particules

Le coin supérieur droit de la plupart des exemples comporte une vue des paramètres qui peut être affichée ou masquée en cliquant sur son icône. Ces paramètres permettent d’illustrer les fonctionnalités individuelles de l’API ainsi que le comportement dynamique des systèmes de particules.

Panneau de configuration pour les effets de particules « feu », « fumée » et « étincelles »

Exemple « Snowing »

Découvrons les bases d’ Particles3D à l’aide de l’exemple « Snowing ».

Deux cubes colorés avec des particules de neige qui tombent et un panneau de configuration des particules

Commencez par importer le module QtQuick3D.Particles3D à l’aide de l’instruction suivante :

import QtQuick3D.Particles3D

ParticleSystem3D est la racine du système de particules qui gère la synchronisation du système et regroupe tous les autres éléments associés, tels que les particules, les émetteurs et les affecteurs.

ParticleSystem3D {
    id: psystem

    // Start so that the snowing is in full steam
    startTime: 15000

Ensuite, nous créons une particule « SpriteParticle3D », qui est une particule visuelle de texture 2D. Si nous avions besoin de particules sous forme de modèles 3D, nous pourrions utiliser à la place ModelParticle3D. Il est important de définir le nombre de particules à l’aide de maxAmount afin que des tailles de tampon optimales soient allouées. Ici, nos flocons de neige sont blancs, avec une opacité variable, et ils apparaissent et disparaissent progressivement en 1 000 ms.

SpriteParticle3D {
    id: snowParticle
    sprite: Texture {
        source: "images/snowflake.png"
    }
    maxAmount: 1500 * sliderIntensity.sliderValue
    color: "#ffffff"
    colorVariation: Qt.vector4d(0.0, 0.0, 0.0, 0.5);
    fadeInDuration: 1000
    fadeOutDuration: 1000
}

Ensuite, nous aurons besoin de ParticleEmitter3D pour émettre les particules de snowParticle mentionnées ci-dessus. La propriété shape définit la zone d’émission. Ici, nous définissons des flocons de neige présentant une rotation et une taille variables. La propriété velocity permet de définir la direction et la vitesse initiales des particules émises. Chaque particule de flocon de neige existe pendant 15 secondes et la emiting rate est contrôlée à l’aide des curseurs de réglage.

ParticleEmitter3D {
    id: emitter
    particle: snowParticle
    position: Qt.vector3d(0, 1000, -350)
    depthBias: -100
    scale: Qt.vector3d(15.0, 0.0, 15.0)
    shape: ParticleShape3D {
        type: ParticleShape3D.Sphere
    }
    particleRotationVariation: Qt.vector3d(180, 180, 180)
    particleRotationVelocityVariation: Qt.vector3d(50, 50, 50);
    particleScale: 2.0
    particleScaleVariation: 0.5;
    velocity: VectorDirection3D {
        direction: Qt.vector3d(0, sliderVelocityY.sliderValue, 0)
        directionVariation: Qt.vector3d(0, sliderVelocityY.sliderValue * 0.4, 0)
    }
    emitRate: sliderEmitRate.sliderValue * sliderIntensity.sliderValue
    lifeSpan: 15000
}

On utilise généralement aussi des affectors pour rendre le mouvement des particules plus intéressant. Dans cet exemple « Snowing », nous utilisons « Wander3D » pour faire voler les flocons de neige en suivant des courbes ondulées, ainsi que « PointRotator3D » pour simuler un temps venteux.

Wander3D {
    enabled: checkBoxWanderEnabled.checked
    globalAmount: Qt.vector3d(sliderWanderGlobalAmount.sliderValue, 0, sliderWanderGlobalAmount.sliderValue)
    globalPace: Qt.vector3d(sliderWanderGlobalPace.sliderValue, 0, sliderWanderGlobalPace.sliderValue)
    uniqueAmount: Qt.vector3d(sliderWanderUniqueAmount.sliderValue, 0, sliderWanderUniqueAmount.sliderValue)
    uniquePace: Qt.vector3d(sliderWanderUniquePace.sliderValue, 0, sliderWanderUniquePace.sliderValue)
    uniqueAmountVariation: sliderWanderUniqueAmountVariation.sliderValue
    uniquePaceVariation: sliderWanderUniquePaceVariation.sliderValue
}
PointRotator3D {
    enabled: checkBoxRotatorEnabled.checked
    pivotPoint: Qt.vector3d(0, 0, -350)
    direction: Qt.vector3d(0, 1, 0)
    magnitude: sliderRotatorMagnitude.sliderValue
}

Exemple de projet sur code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.