Sé que esto es una cuestión de matemáticas centradas, pero ... Si nos fijamos en la página (y tener una buena tarjeta gráfica) http://mrdoob.github.com/three.js/examples/webgl_shader.html¿Alguien puede explicar qué está haciendo este sombreador de fragmentos GLSL?
Si nos fijamos en la fuente, se dará cuenta de un fragmento de miedo en busca de sombreado .
No estoy buscando una explicación detallada, pero una idea del tipo de cosa que está sucediendo, o la fuente de información sobre qué está pasando exactamente aquí ... No estoy buscando una guía de GLSL, pero información en las matemáticas Me doy cuenta de que esto podría ser más adecuado para Matemáticas StackExchange sitio, pero que me gustaría probar aquí primero ...
<script id="fragmentShader" type="x-shader/x-fragment">
uniform vec2 resolution;
uniform float time;
void main() {
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy/resolution.xy;
float a = time*40.0;
float d,e,f,g=1.0/40.0,h,i,r,q;
e=400.0*(p.x*0.5+0.5);
f=400.0*(p.y*0.5+0.5);
i=200.0+sin(e*g+a/150.0)*20.0;
d=200.0+cos(f*g/2.0)*18.0+cos(e*g)*7.0;
r=sqrt(pow(i-e,2.0)+pow(d-f,2.0));
q=f/r;
e=(r*cos(q))-a/2.0;f=(r*sin(q))-a/2.0;
d=sin(e*g)*176.0+sin(e*g)*164.0+r;
h=((f+d)+a/2.0)*g;
i=cos(h+r*p.x/1.3)*(e+e+a)+cos(q*g*6.0)*(r+h/3.0);
h=sin(f*g)*144.0-sin(e*g)*212.0*p.x;
h=(h+(f-e)*q+sin(r-(a+h)/7.0)*10.0+i/4.0)*g;
i+=cos(h*2.3*sin(a/350.0-q))*184.0*sin(q-(r*4.3+a/12.0)*g)+tan(r*g+h)*184.0*cos(r*g+h);
i=mod(i/5.6,256.0)/64.0;
if(i<0.0) i+=4.0;
if(i>=2.0) i=4.0-i;
d=r/350.0;
d+=sin(d*d*8.0)*0.52;
f=(sin(a*g)+1.0)/2.0;
gl_FragColor=vec4(vec3(f*i/1.6,i/2.0+d/13.0,i)*d*p.x+vec3(i/1.3+d/8.0,i/2.0+d/18.0,i)*d*(1.0-p.x),1.0);
}
</script>
Hay http://glsl.heroku.com/e escrito por mr.doob. Aquí está el código de arriba pegado en http://glsl.heroku.com/e#1579.0 – gman