Revision a8537f43
Added by Leszek Koltunski over 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.