Project

General

Profile

« Previous | Next » 

Revision a7067deb

Added by Leszek Koltunski over 7 years ago

small improvements in DISTORT

View differences:

src/main/java/org/distorted/library/EffectQueueVertex.java
179 179
      mUniforms[NUM_UNIFORMS*effect+3] = (float)Math.sin(d);
180 180
      mUniforms[NUM_UNIFORMS*effect+5] = (float)Math.cos(d);
181 181
      }
182
    if( mName[effect]==EffectNames.DISTORT.ordinal() )
183
      {
184
      mUniforms[NUM_UNIFORMS*effect+1] =-mUniforms[NUM_UNIFORMS*effect+1];
185
      }
182 186
    }
183 187

  
184 188
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/res/raw/main_fragment_shader.glsl
105 105
    }
106 106
#endif
107 107

  
108
  gl_FragColor = vec4(pixel.rgb * 0.5 * (v_Normal.z+1.0), pixel.a);
108
  gl_FragColor = vec4(pixel.rgb * v_Normal.z, pixel.a);
109 109
  }
src/main/res/raw/main_vertex_shader.glsl
285 285
  {
286 286
  vec2 center = vUniforms[effect+1].zw;
287 287
  vec2 ps = center-v.xy;
288
  vec3 force = vUniforms[effect].xyz;
288 289
  float d = degree(vUniforms[effect+2],center,ps);
289
  vec2 w = vec2(vUniforms[effect].x, -vUniforms[effect].y);
290
  float uz = vUniforms[effect].z;                                         // height of the bubble
291
  float denominator = dot(ps+(1.0-d)*w,ps);
292
  float one_over_denom = 1.0/(denominator-0.001*(sign(denominator)-1.0)); // = denominator==0 ? 1000:1/denominator;
290
  float denom = dot(ps+(1.0-d)*force.xy,ps);
291
  float one_over_denom = 1.0/(denom-0.001*(sign(denom)-1.0));          // = denom==0 ? 1000:1/denom;
293 292

  
294
  //v.z += uz*d;                                                          // cone
295
  //b = -(uz*(1.0-d))*one_over_denom;                                     //
293
  //v.z += force.z*d;                                                  // cone
294
  //b = -(force.z*(1.0-d))*one_over_denom;                             //
296 295
        
297
  //v.z += uz*d*d*(3.0-2.0*d);                                            // thin bubble
298
  //b = -(6.0*uz*d*(1.0-d)*(1.0-d))*one_over_denom;                       //
296
  //v.z += force.z*d*d*(3.0-2.0*d);                                    // thin bubble
297
  //b = -(6.0*force.z*d*(1.0-d)*(1.0-d))*one_over_denom;               //
299 298
        
300
  v.z += uz*d*d*(3.0*d*d -8.0*d +6.0);                                    // thick bubble
301
  float b = -(12.0*uz*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;          //
299
  v.z += force.z*d*d*(3.0*d*d -8.0*d +6.0);                            // thick bubble
300
  float b = -(12.0*force.z*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;  //
302 301
                
303
  v.xy += d*w;
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);
302
  v.xy += d*force.xy;
303
  n.xy += n.z*b*ps;
329 304
  }
330 305
 
331 306
//////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff