Project

General

Profile

« Previous | Next » 

Revision 9ea4f88f

Added by Leszek Koltunski about 8 years ago

Better normals in DISTORT

View differences:

src/main/res/raw/main_vertex_shader.glsl
301 301
  float b = -(12.0*uz*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;          //
302 302
                
303 303
  v.xy += d*w;
304
  n.xy += b*ps;
304

  
305
  float l= dot(ps,ps);
306
  float psx,psy;
307

  
308
  if( l==0.0 )
309
    {
310
    psx = 0.0;
311
    psy = 0.0;
312
    }
313
  else
314
    {
315
    float len = sqrt(l);
316
    psx = ps.x / len;
317
    psy = ps.y / len;
318
    }
319

  
320
  float e = b*b*l;
321
  float cosA = sqrt(1.0/(1.0+e));
322
  float sinA = sign(uz)*sqrt(e)*cosA;
323
  float t1 = sinA*n.z;
324
  float t2 = (1.0-cosA)*(psy*n.x-psx*n.y);
325

  
326
  n.x = cosA*n.x - t1*psx + t2*psy;
327
  n.y = cosA*n.y - t1*psy - t2*psx;
328
  n.z = cosA*n.z + sinA*(psy*n.y + psx*n.x);
305 329
  }
306 330
 
307 331
//////////////////////////////////////////////////////////////////////////////////////////////
......
348 372
//
349 373
// Directional sinusoidal wave effect.
350 374

  
351
void wave(in int effect, inout vec4 v)
375
void wave(in int effect, inout vec4 v, inout vec4 n)
352 376
  {
353 377
  vec2 center     = vUniforms[effect+1].zw;
354 378
  float sinA      = vUniforms[effect  ].y;
......
359 383
  float length    = vUniforms[effect  ].z;
360 384

  
361 385
  vec2 ps = center-v.xy;
362
  float deg = degree_region(vUniforms[effect+2],ps);
363
  float d = -ps.x*cosB-ps.y*sinB;
364
  float num = length==0.0 ? 0.0 : d / length;
365

  
366
  vec3 dv = sin(1.578*num)*amplitude*deg*vec3(sinB*cosA,cosB*cosA,sinA);
386
  float deg = amplitude*degree_region(vUniforms[effect+2],ps);
367 387

  
368
  v.xyz += dv;
388
  if( deg != 0.0 )
389
    {
390
    float angle = length==0.0 ? 0.0 : 1.578*(ps.x*cosB+ps.y*sinB) / length;
391
    v.xyz += sin(angle)*deg*vec3(sinB*cosA,cosB*cosA,sinA);
392
    }
369 393
  }
370 394

  
371 395
#endif
......
384 408
    else if( vType[i]==DEFORM ) deform (3*i,v);
385 409
    else if( vType[i]==SINK   ) sink   (3*i,v);
386 410
    else if( vType[i]==SWIRL  ) swirl  (3*i,v);
387
    else if( vType[i]==WAVE   ) wave   (3*i,v);
411
    else if( vType[i]==WAVE   ) wave   (3*i,v,n);
388 412
    }
389 413
 
390 414
  restrict(v.z);  

Also available in: Unified diff