Revision a8537f43
Added by Leszek Koltunski almost 8 years ago
src/main/res/raw/main_vertex_shader.glsl | ||
---|---|---|
214 | 214 |
// along the force line is. |
215 | 215 |
// 0<=C<1 looks completely ridiculous and C<0 destroys the system. |
216 | 216 |
|
217 |
void deform(in int effect, inout vec4 v, inout vec4 n)
|
|
217 |
void deform(in int effect, inout vec3 v, inout vec3 n)
|
|
218 | 218 |
{ |
219 | 219 |
const vec2 ONE = vec2(1.0,1.0); |
220 | 220 |
|
... | ... | |
309 | 309 |
// Thus we actually want to compute N(v.x,v.y) = a*(-(dx/|PS|)*f'(|PX|), -(dy/|PS|)*f'(|PX|), 1) and keep adding |
310 | 310 |
// the first two components. (a is the horizontal part) |
311 | 311 |
|
312 |
void distort(in int effect, inout vec4 v, inout vec4 n)
|
|
312 |
void distort(in int effect, inout vec3 v, inout vec3 n)
|
|
313 | 313 |
{ |
314 | 314 |
vec2 center = vUniforms[effect+1].yz; |
315 | 315 |
vec2 ps = center-v.xy; |
... | ... | |
337 | 337 |
// Pull P=(v.x,v.y) towards center of the effect with P' = P + (1-h)*dist(S-P) |
338 | 338 |
// when h>1 we are pushing points away from S: P' = P + (1/h-1)*dist(S-P) |
339 | 339 |
|
340 |
void sink(in int effect,inout vec4 v)
|
|
340 |
void sink(in int effect,inout vec3 v)
|
|
341 | 341 |
{ |
342 | 342 |
vec2 center = vUniforms[effect+1].yz; |
343 | 343 |
vec2 ps = center-v.xy; |
... | ... | |
356 | 356 |
// with P' = P + (1-h)*dist(line to P) |
357 | 357 |
// when h>1 we are pushing points away from S: P' = P + (1/h-1)*dist(line to P) |
358 | 358 |
|
359 |
void pinch(in int effect,inout vec4 v)
|
|
359 |
void pinch(in int effect,inout vec3 v)
|
|
360 | 360 |
{ |
361 | 361 |
vec2 center = vUniforms[effect+1].yz; |
362 | 362 |
vec2 ps = center-v.xy; |
... | ... | |
375 | 375 |
// This effect rotates the current vertex V by vInterpolated.x radians clockwise around the circle dilated |
376 | 376 |
// by (1-d) around the center of the effect S. |
377 | 377 |
|
378 |
void swirl(in int effect, inout vec4 v)
|
|
378 |
void swirl(in int effect, inout vec3 v)
|
|
379 | 379 |
{ |
380 | 380 |
vec2 center = vUniforms[effect+1].yz; |
381 | 381 |
vec2 PS = center-v.xy; |
... | ... | |
460 | 460 |
// |
461 | 461 |
// Generally speaking I'd keep to amplitude < length, as the opposite case has some other problems as well. |
462 | 462 |
|
463 |
void wave(in int effect, inout vec4 v, inout vec4 n)
|
|
463 |
void wave(in int effect, inout vec3 v, inout vec3 n)
|
|
464 | 464 |
{ |
465 | 465 |
vec2 center = vUniforms[effect+1].yz; |
466 | 466 |
float amplitude = vUniforms[effect ].x; |
... | ... | |
484 | 484 |
|
485 | 485 |
vec3 dir= vec3(sinB*cosA,cosB*cosA,sinA); |
486 | 486 |
|
487 |
v.xyz += sin(angle)*deg*dir;
|
|
487 |
v += sin(angle)*deg*dir; |
|
488 | 488 |
|
489 | 489 |
if( n.z != 0.0 ) |
490 | 490 |
{ |
... | ... | |
529 | 529 |
|
530 | 530 |
void main() |
531 | 531 |
{ |
532 |
vec4 v = vec4( 2.0*u_objD*a_Position,1.0 );
|
|
533 |
vec4 n = vec4(a_Normal,0.0);
|
|
532 |
vec3 v = 2.0*u_objD*a_Position;
|
|
533 |
vec3 n = a_Normal;
|
|
534 | 534 |
|
535 | 535 |
#if NUM_VERTEX>0 |
536 | 536 |
for(int i=0; i<vNumEffects; i++) |
... | ... | |
546 | 546 |
restrictZ(v.z); |
547 | 547 |
#endif |
548 | 548 |
|
549 |
v_Position = v.xyz;
|
|
549 |
v_Position = v; |
|
550 | 550 |
v_TexCoordinate = a_TexCoordinate; |
551 |
v_Normal = normalize(vec3(u_MVMatrix*n));
|
|
552 |
gl_Position = u_MVPMatrix*v;
|
|
551 |
v_Normal = normalize(vec3(u_MVMatrix*vec4(n,0.0)));
|
|
552 |
gl_Position = u_MVPMatrix*vec4(v,1.0);
|
|
553 | 553 |
} |
Also available in: Unified diff
Preparation for effect-independent computation of the nermal vectors.