Kann mir jemand erklären, was dieses GLSL fragment shader ist zu tun?
Merke ich, dies ist ein Mathe-centric Frage, aber... wenn man sich diese Webseite (und eine gute Grafikkarte) http://mrdoob.github.com/three.js/examples/webgl_shader.html
Wenn Sie einen Blick auf die Quelle, werden Sie feststellen, eine beängstigend aussehende fragment-shader.
Ich bin nicht auf der Suche für eine ausführliche Erklärung, aber eine Vorstellung von der Art von Sache, die passiert sind, oder die Quelle der information, was genau ist hier passiert.. ich bin nicht nach einem guide zu GLSL, aber info auf der Mathematik. Ich weiß, dass es möglicherweise besser geeignet, um Math StackExchange Seite, aber dachte, ich würde versuchen erstmal hier...
<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>
- Es gibt glsl.heroku.com/e geschrieben von Herr.doobe. Hier ist der code oben eingefügt in glsl.heroku.com/e#1579.0
- Die SSL-cert auf glsl.heroku.com muss aktualisiert werden :/
Du musst angemeldet sein, um einen Kommentar abzugeben.
Monjori ist aus der demo-Szene.
Die einfache Antwort ist, dass es über eine Formel zu generieren, die ein Muster. WebGL ist, gehen Sie zum aufrufen dieser Funktion einmal für jedes pixel auf dem Bildschirm. Die einzigen Dinge, die sich ändern wird sind die Zeit und der gl_FragCoord das ist die Lage der pixel gezeichnet wird.
Lassen Sie uns es brechen ein wenig
Eines der Dinge, das ist gut, um zu versuchen, um zu sehen, was passiert, ist, Sie früh beendet, in der shader. First off, können Sie sehen die shader hier
http://glsl.heroku.com/e#1579.0
oder
https://www.shadertoy.com/view/lsfyRS
Wenn wir gehen, um die Linie 11
einfügen und nur, nachdem er so etwas
Solange wir konvertieren Sie den Wert auf etwas, das von 0 bis 1 können wir das Ergebnis sehen
zum Beispiel gehen Sie nach unten zu Zeile 14
Da wir wissen, wie es geht 200 +/- 18 +/- 7 das 175 + 225 so zu konvertieren, dass zu 0 zu 1 mit
wird Ihnen eine Vorstellung, was es tut.
Ich bin mir sicher, dass Sie arbeiten können, den rest.