ragon Creative Commons License 2012.01.02 0 0 432

En vok ironman  lol, nem mindegy?

 

 

Szoval, vissza a fizikahoz. Elerkezett az ido, amikor barki irhat shadert egy egyszeru browserben, mint pl a firefox 4.

Ez majd sokmindenre lehet hasznalni, tobbek kozt a fizika oktatasban.

 

Kezdetnek alljon itt a Bragg-diffrakciot bemutato shader.

 

 

#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 amp=0.0;
#if 1  
  float hhossz=0.2+mouse2.y*7.0;//eger mozog fuggolegesen, hullamhossz valtozil
  float d=10.0;
#else  
  float hhossz=0.7;
  float d=10.0+mouse2.y*17.0;//eger mozog fuggolegesen, racstavolsag valtozil
#endif
  float szog=(mouse2.x*180.0)*radian;//eger mozog vizszinesen
  vec3 xirany=vec3(sin(szog),cos(szog),0.0);//racs x
  vec3 yirany=vec3(xirany.y,-xirany.x,0.0);//y tengelye

float skala=20000.0;//screen meret 0-1, ehhez kell allitani mindent
hhossz/=skala;
d/=skala;
  float k=pi*2.0/hhossz;

  for(int y=-10;y<11;y++)
  for(int x=-10;x<11;x++)
  {
    vec3 racs=vec3(0.5,0.5,0.0)+
       xirany*float(x)*d+
       yirany*float(y)*d*0.3;
    float tav=racs.y;//hullam y iranyban mozog!

    tav+=length(screen-racs);//tavolsag a racstol a keppontig
    amp+=sin(tav*k);
  }
  amp*=4.0;//vilagosabb
  amp/=(20.0*20.0);

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


//http://www.iquilezles.org/apps/shadertoy/

 

Ha minden jol megy, akkor csak be kell masolni az alabbi link szovegdobozaba a programot, raklikkelni a forditas gombra, es mar fut is a shader.

Előzmény: dr.Akula úr (431)