diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2011-07-20 13:46:52 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-07-28 11:27:26 +0200 |
commit | 0511dfc0b8851baf84df73780e770f1025261068 (patch) | |
tree | 65a9acb210ff5197c2c3f11edac594a124bfc206 /examples | |
parent | 8fda8d16df9744b69a97020e3aae1ad40ff1f538 (diff) |
Initial CustomEmitter and CustomAffector implementation
Currently basic and can't access all properties.
Change-Id: I66efc235112cffcf1a3ca5cc69099a5d09ec7691
Reviewed-on: http://codereview.qt.nokia.com/1950
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/declarative/particles/custom/content/backgroundLeaves.jpg | bin | 0 -> 78665 bytes | |||
-rw-r--r-- | examples/declarative/particles/custom/content/realLeaf1.png | bin | 0 -> 14043 bytes | |||
-rw-r--r-- | examples/declarative/particles/custom/content/realLeaf2.png | bin | 0 -> 12452 bytes | |||
-rw-r--r-- | examples/declarative/particles/custom/content/realLeaf3.png | bin | 0 -> 21930 bytes | |||
-rw-r--r-- | examples/declarative/particles/custom/content/realLeaf4.png | bin | 0 -> 21020 bytes | |||
-rw-r--r-- | examples/declarative/particles/custom/custom.qml | 100 | ||||
-rw-r--r-- | examples/declarative/particles/custom/fallingleaves.qml | 97 | ||||
-rw-r--r-- | examples/declarative/particles/exampleslauncher.qml | 2 | ||||
-rw-r--r-- | examples/declarative/particles/launcherContent/icons/custom.png | bin | 0 -> 22967 bytes | |||
-rw-r--r-- | examples/declarative/particles/launcherContent/icons/fallingleaves.png | bin | 0 -> 10350 bytes |
10 files changed, 199 insertions, 0 deletions
diff --git a/examples/declarative/particles/custom/content/backgroundLeaves.jpg b/examples/declarative/particles/custom/content/backgroundLeaves.jpg Binary files differnew file mode 100755 index 0000000000..08be16751d --- /dev/null +++ b/examples/declarative/particles/custom/content/backgroundLeaves.jpg diff --git a/examples/declarative/particles/custom/content/realLeaf1.png b/examples/declarative/particles/custom/content/realLeaf1.png Binary files differnew file mode 100644 index 0000000000..1ec184a86c --- /dev/null +++ b/examples/declarative/particles/custom/content/realLeaf1.png diff --git a/examples/declarative/particles/custom/content/realLeaf2.png b/examples/declarative/particles/custom/content/realLeaf2.png Binary files differnew file mode 100644 index 0000000000..8ab84cd9e2 --- /dev/null +++ b/examples/declarative/particles/custom/content/realLeaf2.png diff --git a/examples/declarative/particles/custom/content/realLeaf3.png b/examples/declarative/particles/custom/content/realLeaf3.png Binary files differnew file mode 100644 index 0000000000..f1f3ea96e6 --- /dev/null +++ b/examples/declarative/particles/custom/content/realLeaf3.png diff --git a/examples/declarative/particles/custom/content/realLeaf4.png b/examples/declarative/particles/custom/content/realLeaf4.png Binary files differnew file mode 100644 index 0000000000..51bde09685 --- /dev/null +++ b/examples/declarative/particles/custom/content/realLeaf4.png diff --git a/examples/declarative/particles/custom/custom.qml b/examples/declarative/particles/custom/custom.qml new file mode 100644 index 0000000000..393870527f --- /dev/null +++ b/examples/declarative/particles/custom/custom.qml @@ -0,0 +1,100 @@ +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +ParticleSystem{ + id: sys + width: 360 + height: 600 + Rectangle{ + z: -1 + anchors.fill: parent + color: "black" + Text{ + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 42 + color: "white" + text: "It's all in QML." + } + } + property real petalLength: 180 + property real petalRotation: 0 + NumberAnimation on petalRotation{ + from: 0; + to: 360; + loops: -1; + running: true + duration: 24000 + } + function convert(a){return a*(Math.PI/180);} + CustomEmitter{ + lifeSpan: 4000 + emitRate: 120 + size: 12 + anchors.centerIn: parent + onEmitParticle:{ + particle.size = Math.max(12,Math.min(492,Math.tan(particle.t/2)*24)); + var theta = Math.floor(Math.random() * 6.0) / 6.0; + theta *= 2.0*Math.PI; + theta += sys.convert(sys.petalRotation); + particle.sx = petalLength * Math.cos(theta); + particle.sy = petalLength * Math.sin(theta); + particle.ax = particle.sx * -0.5; + particle.ay = particle.sy * -0.5; + } + } + 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 + + 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/360.0, pos.y/600.0); + } + " + 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/custom/fallingleaves.qml b/examples/declarative/particles/custom/fallingleaves.qml new file mode 100644 index 0000000000..e41d214594 --- /dev/null +++ b/examples/declarative/particles/custom/fallingleaves.qml @@ -0,0 +1,97 @@ +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +Item { + width: 360 + height: 600 + + Image{ + source: "content/backgroundLeaves.jpg" + anchors.fill: parent + } + ParticleSystem{ id: sys } + Emitter{ + system: sys + width: parent.width + emitRate: 6 + lifeSpan: 12000 + size: 80 + speed: PointDirection{ y: 60 } + } + Wander { + system: sys + anchors.fill: parent + xVariance: 60 + pace: 60 + } + CustomAffector{ + system: sys + property real coefficient: 0.5 + property real speed: 10.0 + onAffectParticle:{ + /* //Linear movement + if (particle.r == 0){ + particle.r = Math.random() > 0.5 ? -1 : 1; + }else if (particle.r == 1){ + particle.rotation += speed * dt; + if(particle.rotation >= maxAngle) + particle.r = -1; + }else if (particle.r == -1){ + particle.rotation -= speed * dt; + if(particle.rotation <= -1 * maxAngle) + particle.r = 1; + } + */ + //Wobbly movement + if (particle.r == 0.0){ + particle.r = Math.random() + 0.01; + } + particle.rotation += speed * particle.r * dt; + particle.r -= particle.rotation * coefficient; + if (particle.r == 0.0) + particle.r -= particle.rotation * 0.000001; + } + } + + ImageParticle{ + anchors.fill: parent + id: particles + system: sys + sprites: [Sprite{ + source: "content/realLeaf1.png" + frames: 1 + duration: 1 + to: {"a":1, "b":1, "c":1, "d":1} + }, Sprite{ + name: "a" + source: "content/realLeaf1.png" + frames: 1 + duration: 10000 + }, + Sprite{ + name: "b" + source: "content/realLeaf2.png" + frames: 1 + duration: 10000 + }, + Sprite{ + name: "c" + source: "content/realLeaf3.png" + frames: 1 + duration: 10000 + }, + Sprite{ + name: "d" + source: "content/realLeaf4.png" + frames: 1 + duration: 10000 + } + ] + + width: 100 + height: 100 + x: 20 + y: 20 + z:4 + } +} diff --git a/examples/declarative/particles/exampleslauncher.qml b/examples/declarative/particles/exampleslauncher.qml index 5d2f49e8e1..7bdd3af51f 100644 --- a/examples/declarative/particles/exampleslauncher.qml +++ b/examples/declarative/particles/exampleslauncher.qml @@ -60,6 +60,8 @@ Rectangle{ "../asteroid/asteroid.qml", "../asteroid/blackhole.qml", "../custom/blurparticles.qml", + "../custom/custom.qml", + "../custom/fallingleaves.qml", "../modelparticles/bubbles.qml", "../modelparticles/gridsplosion.qml", "../modelparticles/package.qml", diff --git a/examples/declarative/particles/launcherContent/icons/custom.png b/examples/declarative/particles/launcherContent/icons/custom.png Binary files differnew file mode 100644 index 0000000000..6d492573d1 --- /dev/null +++ b/examples/declarative/particles/launcherContent/icons/custom.png diff --git a/examples/declarative/particles/launcherContent/icons/fallingleaves.png b/examples/declarative/particles/launcherContent/icons/fallingleaves.png Binary files differnew file mode 100644 index 0000000000..d02e7918fa --- /dev/null +++ b/examples/declarative/particles/launcherContent/icons/fallingleaves.png |