Qt Quick Particles Examples - CustomParticle

Image non disponible

This is a collection of small QML examples relating to using CustomParticle in the particle system. Each example is a small QML file emphasizing a different way to use CustomParticle.

Blur Particles adds a blur effect to the particles, which increases over the particle's life time. It uses a custom vertex shader:

 
Sélectionnez
vertexShader:"
    uniform lowp float qt_Opacity;
    varying lowp float fFade;
    varying lowp float fBlur;

    void main() {
        defaultMain();
        highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
        highp float fadeIn = min(t * 10., 1.);
        highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));

        fFade = fadeIn * fadeOut * qt_Opacity;
        fBlur = max(0.2 * t, t * qt_ParticleR);
    }
"

to propagate life time simulation to a custom fragment shader:

 
Sélectionnez
fragmentShader: "
    uniform sampler2D source;
    uniform sampler2D blurred;
    varying highp vec2 qt_TexCoord0;
    varying highp float fBlur;
    varying highp float fFade;
    void main() {
        gl_FragColor = mix(texture2D(source, qt_TexCoord0), texture2D(blurred, qt_TexCoord0), min(1.0,fBlur*3.0)) * fFade;
    }"

which has access to both the normal image sampler and a blurred sampler, the image plus a ShaderEffect.

Fragment Shader just uses the particle system as a vertex delivery system.

 
Sélectionnez
fragmentShader: "
    varying highp vec2 fPos;
    varying lowp float fFade;
    varying highp vec2 qt_TexCoord0;
    void main() {//*2 because this generates dark colors mostly
        highp vec2 circlePos = qt_TexCoord0*2.0 - vec2(1.0,1.0);
        highp float dist = length(c