Revision b86265d6
Added by Leszek Koltunski almost 9 years ago
| src/main/res/raw/main_vertex_shader.glsl | ||
|---|---|---|
| 212 | 212 |
// along the force line is. |
| 213 | 213 |
// 0<=C<1 looks completely ridiculous and C<0 destroys the system. |
| 214 | 214 |
|
| 215 |
void deform(in int effect, inout vec4 v) |
|
| 215 |
void deform(in int effect, inout vec4 v, inout vec4 n)
|
|
| 216 | 216 |
{
|
| 217 | 217 |
const vec2 ONE = vec2(1.0,1.0); |
| 218 | 218 |
|
| ... | ... | |
| 224 | 224 |
vec2 ps = center-v.xy; |
| 225 | 225 |
vec2 aPS = abs(ps); |
| 226 | 226 |
vec2 maxps = u_objD.xy + abs(center); |
| 227 |
vec2 force = vUniforms[effect].xy * degree_region(vUniforms[effect+2],ps); |
|
| 228 |
vec2 aForce = abs(force); |
|
| 229 |
|
|
| 227 |
float d = degree_region(vUniforms[effect+2],ps); |
|
| 228 |
vec3 force = vUniforms[effect].xyz * d; |
|
| 229 |
vec2 aForce = abs(force.xy); |
|
| 230 |
float denom = dot(ps+(1.0-d)*force.xy,ps); |
|
| 231 |
float one_over_denom = 1.0/(denom-0.001*(sign(denom)-1.0)); |
|
| 230 | 232 |
vec2 Aw = A*maxps; |
| 231 | 233 |
vec2 quot = ps / maxps; |
| 232 | 234 |
quot = quot*quot; // ( (x/W)^2 , (y/H)^2 ) where x,y are distances from V to center |
| ... | ... | |
| 243 | 245 |
|
| 244 | 246 |
v.x -= (mvXvert+mvXhorz); |
| 245 | 247 |
v.y -= (mvYvert+mvYhorz); |
| 248 |
|
|
| 249 |
v.z += force.z*d*d*(3.0*d*d -8.0*d +6.0); // thick bubble |
|
| 250 |
float b = -(12.0*force.z*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;// |
|
| 251 |
|
|
| 252 |
n.xy += n.z*b*ps; |
|
| 246 | 253 |
} |
| 247 | 254 |
|
| 248 | 255 |
////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 527 | 534 |
for(int i=0; i<vNumEffects; i++) |
| 528 | 535 |
{
|
| 529 | 536 |
if( vType[i]==DISTORT) distort(3*i,v,n); |
| 530 |
else if( vType[i]==DEFORM ) deform (3*i,v); |
|
| 537 |
else if( vType[i]==DEFORM ) deform (3*i,v,n);
|
|
| 531 | 538 |
else if( vType[i]==SINK ) sink (3*i,v); |
| 532 | 539 |
else if( vType[i]==PINCH ) pinch (3*i,v); |
| 533 | 540 |
else if( vType[i]==SWIRL ) swirl (3*i,v); |
Also available in: Unified diff
Add 3rd dimension to the Deform effect.