@@ -0,0 +1,24 @@ | |||
{ | |||
"warps": [ | |||
{ | |||
"blend": { | |||
"edges": "0, 0, 0.5, 0.5", | |||
"exponent": 2.0, | |||
"gamma": "1, 1, 1", | |||
"luminance": "0.5, 0.5, 0.5" | |||
}, | |||
"brightness": 1.0, | |||
"type": 2, | |||
"warp": { | |||
"columns": 2, | |||
"control points": [ | |||
"0, 0", | |||
"1, 0", | |||
"1, 1", | |||
"0, 1" | |||
], | |||
"rows": 2 | |||
} | |||
} | |||
] | |||
} |
@@ -0,0 +1,16 @@ | |||
#version 150 | |||
in vec2 vTexCoord; | |||
in vec4 vColor; | |||
out vec4 fragColor; | |||
void main(void) | |||
{ | |||
vec2 uv = vTexCoord * 2.0 - 1.0; | |||
float d = dot(uv, uv); | |||
float rim = smoothstep(0.7, 0.8, d); | |||
rim += smoothstep(0.3, 0.4, d) - smoothstep(0.5, 0.6, d); | |||
rim += smoothstep(0.1, 0.0, d); | |||
fragColor = mix(vec4( 0.0, 0.0, 0.0, 0.25), vColor, rim); | |||
} |
@@ -0,0 +1,23 @@ | |||
#version 150 | |||
// OF default uniforms and attributes | |||
uniform mat4 modelViewProjectionMatrix; | |||
uniform vec4 globalColor; | |||
in vec4 position; | |||
in vec2 texcoord; | |||
in vec4 color; | |||
// App uniforms and attributes | |||
in vec4 iPositionScale; | |||
in vec4 iColor; | |||
out vec2 vTexCoord; | |||
out vec4 vColor; | |||
void main(void) | |||
{ | |||
vTexCoord = texcoord; | |||
vColor = globalColor * iColor; | |||
gl_Position = modelViewProjectionMatrix * vec4(position.xy * iPositionScale.z + iPositionScale.xy, position.zw); | |||
} |
@@ -0,0 +1,57 @@ | |||
#version 150 | |||
uniform sampler2D uTexture; | |||
uniform vec4 uExtends; | |||
uniform vec3 uLuminance; | |||
uniform vec3 uGamma; | |||
uniform vec4 uEdges; | |||
uniform vec4 uCorners; | |||
uniform float uExponent; | |||
uniform bool uEditing; | |||
in vec2 vTexCoord; | |||
in vec4 vColor; | |||
out vec4 fragColor; | |||
float map(in float value, in float inMin, in float inMax, in float outMin, in float outMax) | |||
{ | |||
return outMin + (outMax - outMin) * (value - inMin) / (inMax - inMin); | |||
} | |||
float grid(in vec2 uv, in vec2 size) | |||
{ | |||
vec2 coord = uv / size; | |||
vec2 grid = abs(fract(coord - 0.5) - 0.5) / (2.0 * fwidth(coord)); | |||
float line = min(grid.x, grid.y); | |||
return 1.0 - min(line, 1.0); | |||
} | |||
void main(void) | |||
{ | |||
vec4 texColor = texture(uTexture, vTexCoord); | |||
vec2 mapCoord = vec2(map(vTexCoord.x, uCorners.x, uCorners.z, 0.0, 1.0), map(vTexCoord.y, uCorners.y, uCorners.w, 0.0, 1.0)); | |||
float a = 1.0; | |||
if (uEdges.x > 0.0) a *= clamp(mapCoord.x / uEdges.x, 0.0, 1.0); | |||
if (uEdges.y > 0.0) a *= clamp(mapCoord.y / uEdges.y, 0.0, 1.0); | |||
if (uEdges.z > 0.0) a *= clamp((1.0 - mapCoord.x) / uEdges.z, 0.0, 1.0); | |||
if (uEdges.w > 0.0) a *= clamp((1.0 - mapCoord.y) / uEdges.w, 0.0, 1.0); | |||
const vec3 one = vec3(1.0); | |||
vec3 blend = (a < 0.5) ? (uLuminance * pow(2.0 * a, uExponent)) : one - (one - uLuminance) * pow(2.0 * (1.0 - a), uExponent); | |||
texColor.rgb *= pow(blend, one / uGamma); | |||
if (uEditing) | |||
{ | |||
float f = grid(mapCoord.xy * uExtends.xy, uExtends.zw); | |||
vec4 gridColor = vec4(1.0f); | |||
fragColor = mix(texColor * vColor, gridColor, f); | |||
} | |||
else | |||
{ | |||
fragColor = texColor * vColor; | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
#version 150 | |||
// OF default uniforms and attributes | |||
uniform mat4 modelViewProjectionMatrix; | |||
uniform vec4 globalColor; | |||
in vec4 position; | |||
in vec2 texcoord; | |||
in vec4 color; | |||
// App uniforms and attributes | |||
out vec2 vTexCoord; | |||
out vec4 vColor; | |||
void main(void) | |||
{ | |||
vTexCoord = texcoord; | |||
vColor = globalColor; | |||
gl_Position = modelViewProjectionMatrix * position; | |||
} |
@@ -0,0 +1,38 @@ | |||
#version 150 | |||
uniform sampler2D uTexture; | |||
uniform vec3 uLuminance; | |||
uniform vec3 uGamma; | |||
uniform vec4 uEdges; | |||
uniform vec4 uCorners; | |||
uniform float uExponent; | |||
in vec2 vTexCoord; | |||
in vec4 vColor; | |||
out vec4 fragColor; | |||
float map(in float value, in float inMin, in float inMax, in float outMin, in float outMax) | |||
{ | |||
return outMin + (outMax - outMin) * (value - inMin) / (inMax - inMin); | |||
} | |||
void main(void) | |||
{ | |||
vec4 texColor = texture(uTexture, vTexCoord); | |||
vec2 mapCoord = vec2(map(vTexCoord.x, uCorners.x, uCorners.z, 0.0, 1.0), map(vTexCoord.y, uCorners.y, uCorners.w, 0.0, 1.0)); | |||
float a = 1.0; | |||
if (uEdges.x > 0.0) a *= clamp(mapCoord.x / uEdges.x, 0.0, 1.0); | |||
if (uEdges.y > 0.0) a *= clamp(mapCoord.y / uEdges.y, 0.0, 1.0); | |||
if (uEdges.z > 0.0) a *= clamp((1.0 - mapCoord.x) / uEdges.z, 0.0, 1.0); | |||
if (uEdges.w > 0.0) a *= clamp((1.0 - mapCoord.y) / uEdges.w, 0.0, 1.0); | |||
const vec3 one = vec3(1.0); | |||
vec3 blend = (a < 0.5) ? (uLuminance * pow(2.0 * a, uExponent)) : one - (one - uLuminance) * pow(2.0 * (1.0 - a), uExponent); | |||
texColor.rgb *= pow(blend, one / uGamma); | |||
fragColor = texColor * vColor; | |||
} |
@@ -0,0 +1,21 @@ | |||
#version 150 | |||
// OF default uniforms and attributes | |||
uniform mat4 modelViewProjectionMatrix; | |||
uniform vec4 globalColor; | |||
in vec4 position; | |||
in vec2 texcoord; | |||
in vec4 color; | |||
// App uniforms and attributes | |||
out vec2 vTexCoord; | |||
out vec4 vColor; | |||
void main(void) | |||
{ | |||
vTexCoord = texcoord; | |||
vColor = globalColor; | |||
gl_Position = modelViewProjectionMatrix * position; | |||
} |
@@ -0,0 +1,10 @@ | |||
<default> | |||
<sizeMin>0.05</sizeMin> | |||
<sizeMax>4</sizeMax> | |||
<mass>100</mass> | |||
<drag>0</drag> | |||
<maxLife>10</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color></color> | |||
</default> |
@@ -0,0 +1,10 @@ | |||
<default> | |||
<sizeMin>0.05</sizeMin> | |||
<sizeMax>4</sizeMax> | |||
<mass>100</mass> | |||
<drag>0</drag> | |||
<maxLife>10</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color></color> | |||
</default> |
@@ -0,0 +1,10 @@ | |||
<default> | |||
<sizeMin>0.05</sizeMin> | |||
<sizeMax>4</sizeMax> | |||
<mass>100</mass> | |||
<drag>0</drag> | |||
<maxLife>10</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color></color> | |||
</default> |
@@ -0,0 +1,10 @@ | |||
<default> | |||
<sizeMin>0.05</sizeMin> | |||
<sizeMax>4</sizeMax> | |||
<mass>100</mass> | |||
<drag>0</drag> | |||
<maxLife>10</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color></color> | |||
</default> |
@@ -0,0 +1,10 @@ | |||
<default> | |||
<sizeMin>0.05</sizeMin> | |||
<sizeMax>4</sizeMax> | |||
<mass>100</mass> | |||
<drag>0</drag> | |||
<maxLife>10</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color></color> | |||
</default> |
@@ -0,0 +1,21 @@ | |||
<default> | |||
<sizeMin>0.01</sizeMin> | |||
<sizeMax>4.0</sizeMax> | |||
<massMin>100</massMin> | |||
<massMax>250</massMax> | |||
<drag>0</drag> | |||
<maxLife>ofRandom(maxAge - 5, maxAge)</maxLife> | |||
<velMin>-80</velMin> | |||
<velMax>80</velMax> | |||
<color>(5, 241, 219)</color> | |||
<age>0.0</age> | |||
<valueToMoveToTop>0</valueToMoveToTop> | |||
<valueToMoveToRight>0</valueToMoveToRight> | |||
<counterToMoveParticlesToRight>70</counterToMoveParticlesToRight> | |||
<particleLeftScene>false</particleLeftScene> | |||
</default> | |||
vel.set(ofRandom(-20.0, 20.0), ofRandom(-90, -100)); | |||
@@ -14,6 +14,7 @@ Particle::Particle() | |||
} | |||
// ----------------------------------- | |||
Particle::~Particle() | |||
@@ -76,6 +77,18 @@ void Particle::updateParticle(double deltaT, ofVec2f attractor, bool cloudAttrac | |||
} | |||
//-------------------------------------------------------------- | |||
void Particle::doMovementOfParticlesAtRain(bool tornadoIsFinished, double deltaT, float sceneSizeX) | |||
{ | |||
if (tornadoIsFinished == false) { //Movement of partile from bottom to top | |||
position += vel * deltaT; | |||
age += deltaT; | |||
if (position.x >= sceneSizeX) { | |||
position.x = ofRandom(-1, -5); | |||
} | |||
} | |||
} | |||
//-------------------------------------------------------------- | |||
void Particle::doMovementOfParticlesAtSymbols(double deltaT, ofVec2f &attractor) |