diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/declarative/particles/custom/fireworks.qml | 37 | ||||
-rw-r--r-- | examples/declarative/particles/custom/shader.qml | 84 | ||||
-rw-r--r-- | examples/declarative/particles/trails/dynamicemitters.qml | 8 |
3 files changed, 108 insertions, 21 deletions
diff --git a/examples/declarative/particles/custom/fireworks.qml b/examples/declarative/particles/custom/fireworks.qml index edd4accfdf..b73a5e234f 100644 --- a/examples/declarative/particles/custom/fireworks.qml +++ b/examples/declarative/particles/custom/fireworks.qml @@ -45,22 +45,6 @@ Rectangle{ width: 360 height: 600 color: "black" - ParticleSystem{ - id: otherSys - anchors.fill: parent - Emitter{ - id: emitter - emitting: false - emitRate: 100 - lifeSpan: 1000 - emitCap: 1000 - speed: AngledDirection{angleVariation:180; magnitudeVariation: 60} - } - - ImageParticle{ - source: "content/particle.png" - } - } Component{ id: firework Item{ @@ -79,14 +63,28 @@ Rectangle{ repeat: false onTriggered: { img.visible = false; - emitter.burst(100, container.x+24, container.y+24); + emitter.burst(100); } } + Emitter{ + anchors.centerIn: parent + id: emitter + system: syssy + particle: "works" + emitting: false + emitRate: 100 + lifeSpan: 1000 + //speed: AngledDirection{angle: 270; angleVariation:60; magnitudeVariation: 60; magnitude: 20} + speed: PointDirection{y:-60; yVariation: 80; xVariation: 80} + acceleration: PointDirection{y:100; yVariation: 20} + } } } ParticleSystem{ anchors.fill: parent + id: syssy Emitter{ + particle: "fire" width: parent.width y: parent.height emitRate: 2 @@ -94,8 +92,13 @@ Rectangle{ speed: PointDirection{y:-100} } ItemParticle{ + particles: ["fire"] delegate: firework } + ImageParticle{ + particles: ["works"] + source: "content/particle.png" + } } } diff --git a/examples/declarative/particles/custom/shader.qml b/examples/declarative/particles/custom/shader.qml new file mode 100644 index 0000000000..d83e7864c4 --- /dev/null +++ b/examples/declarative/particles/custom/shader.qml @@ -0,0 +1,84 @@ +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +ParticleSystem{ + id: root + width: 1024 + height: 768 + Rectangle{ + z: -1 + anchors.fill: parent + color: "black" + Text{ + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 36 + color: "white" + text: "It's all in the fragment shader." + } + } + Emitter{ + emitRate: 400 + lifeSpan: 8000 + size: 24 + sizeVariation: 16 + speed: PointDirection{x: root.width/10; y: root.height/10;} + //acceleration: AngledDirection{angle:225; magnitude: root.width/36; angleVariation: 45; magnitudeVariation: 80} + acceleration: PointDirection{x: -root.width/40; y: -root.height/40; xVariation: -root.width/20; yVariation: -root.width/20} + } + CustomParticle{ + //TODO: Someway that you don't have to rewrite the basics for a simple addition + vertexShader:" + attribute highp vec2 vPos; + attribute highp vec2 vTex; + attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize + attribute highp vec4 vVec; // x,y = constant speed, z,w = acceleration + attribute highp float r; + + uniform highp mat4 qt_ModelViewProjectionMatrix; + uniform highp float timestamp; + uniform lowp float qt_Opacity; + + varying highp vec2 fTex; + varying lowp float fFade; + varying highp vec2 fPos; + + void main() { + fTex = vTex; + highp float size = vData.z; + highp float endSize = vData.w; + + highp float t = (timestamp - vData.x) / vData.y; + + highp float currentSize = mix(size, endSize, t * t); + + if (t < 0. || t > 1.) + currentSize = 0.; + + highp vec2 pos = vPos + - currentSize / 2. + currentSize * vTex // adjust size + + vVec.xy * t * vData.y // apply speed vector.. + + 0.5 * vVec.zw * pow(t * vData.y, 2.); + + gl_Position = qt_ModelViewProjectionMatrix * vec4(pos.x, pos.y, 0, 1); + + highp float fadeIn = min(t * 20., 1.); + highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.)); + + fFade = fadeIn * fadeOut * qt_Opacity; + fPos = vec2(pos.x/1024., pos.y/768.); + } + " + fragmentShader: " + varying highp vec2 fPos; + varying lowp float fFade; + varying highp vec2 fTex; + void main() {//*2 because this generates dark colors mostly + highp vec2 circlePos = fTex*2.0 - vec2(1.0,1.0); + highp float dist = length(circlePos); + highp float circleFactor = max(min(1.0 - dist, 1.0), 0.0); + gl_FragColor = vec4(fPos.x*2.0 - fPos.y, fPos.y*2.0 - fPos.x, fPos.x*fPos.y*2.0, 0.0) * circleFactor * fFade; + }" + + } +} diff --git a/examples/declarative/particles/trails/dynamicemitters.qml b/examples/declarative/particles/trails/dynamicemitters.qml index 588474fb43..f338c204db 100644 --- a/examples/declarative/particles/trails/dynamicemitters.qml +++ b/examples/declarative/particles/trails/dynamicemitters.qml @@ -81,7 +81,7 @@ Rectangle{ } system: sys emitting: true - emitRate: 64 + emitRate: 32 lifeSpan: 600 size: 24 endSize: 8 @@ -107,12 +107,12 @@ Rectangle{ MouseArea{ anchors.fill: parent onClicked:{ - for(var i=0; i<16; i++){ + for(var i=0; i<8; i++){ var obj = emitterComp.createObject(root); obj.x = mouse.x obj.y = mouse.y - obj.targetX = Math.random() * 640 - obj.targetY = Math.random() * 480 + obj.targetX = Math.random() * 240 - 120 + obj.x + obj.targetY = Math.random() * 240 - 120 + obj.y obj.life = Math.round(Math.random() * 2400) + 200 obj.go(); } |