ragon Creative Commons License 2012.01.02 0 0 439

Mivel nyomat sem latom semmifele cafolatnak, tovabbra is allitom, hogy az elektromagneses kolcsonhatas egyszeru Bragg-diffrakcio.

 

50 anyaghullambol allo hullamcsomag mozgasa teridoben:

 

 

 

#ifdef GL_ES
precision highp float;
#endif

uniform vec2 resolution;
uniform float time;
uniform vec4 mouse;

#define pi 3.1415926
float radian=pi/180.0;



void main(void)
{
 vec2 mouse2=mouse.xy/resolution.xy;
 vec3 screen=vec3(gl_FragCoord.xy/resolution.xy,0.0);


 float c=1.0,m=1.0,h=1.0;
 float v1=-c*0.2;//0 -> 1
 float v2=-c*0.4;//v1 -> 1
 float b1=1.0/sqrt(1.0-v1*v1/(c*c));    float l1=h/(m*b1*v1);
 float b2=1.0/sqrt(1.0-v2*v2/(c*c));    float l2=h/(m*b2*v2);

 float vf1=c*c/v1;
 float vf2=c*c/v2;
 float a1=atan(v1/c);
 float a2=atan(v2/c);
 vec3 p1=vec3(sin(a1),cos(a1),0.0);
 vec3 p2=vec3(sin(a2),cos(a2),0.0);
 l1*=sin(a1);
 l2*=sin(a2);
    



 float amp=0.0;
 float skala=1000.0;//nagyitas=10  normal=1000
    
 float n=50.0;
 for(int i=0;i<50;i++)//n!  hullamcsomag
 {
   float t=float(i)/n;
//t=0.0;//egyik osszetevo
//t=1.0;//masik

   vec3 p3=p1+(p2-p1)*t;//linear interpolation
   float hhossz=l1+(l2-l1)*t;
   hhossz/=skala;
   float k=pi*2.0/hhossz;

   float tav=dot(screen,p3);        
   amp+=sin(tav*k -time);//a hullam nem mozog a teridoben, csak igy latvanyosabb!
 }

 amp/=n;

 if(amp<0.0) gl_FragColor=vec4(-amp,0,0,1);
 else        gl_FragColor=vec4(0,amp,0,1);
}


    

Előzmény: ragon (438)