En esta página

Qt Quick 3D - Particles 3D Testbed Ejemplo

Demuestra cómo utilizar el módulo Qt Quick 3D Particles3D.

Cuatro ventanas con distintos ejemplos de sistemas de partículas

Este ejemplo demuestra diferentes formas de utilizar las características del módulo QtQuick3D.Particles3D. Particles Testbed contiene una colección de ejemplos, algunos enfatizando una característica en particular y otros combinando más características para lograr la apariencia deseada.

Características comunes

Los ejemplos del banco de pruebas comparten algunas características comunes. Para salir del ejemplo y volver a la pantalla de inicio, pulse la flecha hacia atrás situada en la esquina superior izquierda.

La esquina inferior derecha de cada ejemplo contiene un icono que abre la vista de registro. Desde esta vista, puedes ver diferentes datos de depuración sobre las partículas. Cada ParticleSystem3D tiene su propia fila mostrando sus datos ParticleSystem3DLogging.

Estadísticas del sistema de partículas y métricas de rendimiento

La esquina superior derecha de la mayoría de los ejemplos contiene una vista de configuración que puede mostrarse u ocultarse haciendo clic en su icono. Estos ajustes ayudan a demostrar las características individuales de la API, así como el comportamiento dinámico de los sistemas de partículas.

Panel de control para efectos de partículas de fuego, humo y destellos

Ejemplo de nevada

Repasemos los conceptos básicos de Particles3D con el ejemplo Snowing.

Dos cubos de colores con partículas de nieve que caen y panel de configuración de partículas

En primer lugar, importar el módulo QtQuick3D.Particles3D con la siguiente declaración:

import QtQuick3D.Particles3D

ParticleSystem3D es la raíz del sistema de partículas que maneja la temporización del sistema y agrupa todos los demás elementos relacionados como partículas, emisores y afectadores.

ParticleSystem3D {
    id: psystem

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

Luego creamos un SpriteParticle3D que es una partícula visual de textura 2D. Si necesitáramos un modelo de partículas 3D podríamos utilizar alternativamente ModelParticle3D. Definir la cantidad de partículas con maxAmount es importante para que se asignen tamaños de búfer óptimos. Aquí nuestros copos de nieve son blancos, con opacidad variada y se desvanecen en 1000ms.

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
}

A continuación necesitaremos ParticleEmitter3D para emitir las partículas anteriores snowParticle. La propiedad shape define el área donde se emite. Aquí definimos los copos de nieve para que tengan rotación y tamaño variados. Con la propiedad velocity se puede definir la dirección inicial de la velocidad de las partículas emitidas. Cada partícula de copo de nieve existe durante 15 segundos y el emiting rate se controla con los deslizadores de configuración.

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
}

Normalmente también se utilizan algunos afectors para hacer el movimiento de las partículas más interesante. En este ejemplo de Snowing usamos Wander3D para conseguir que los copos de nieve vuelen con curvas onduladas así como PointRotator3D para simular el tiempo ventoso.

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
}

Proyecto de ejemplo @ 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.