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.