Qt Quick 3D - Particles 3D Testbed Ejemplo
Demuestra cómo utilizar el módulo Qt Quick 3D Particles3D.

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.

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.

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

En primer lugar, importar el módulo QtQuick3D.Particles3D con la siguiente declaración:
import QtQuick3D.Particles3DParticleSystem3D 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 }
© 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.