Shaders

//Fragment shader varying highp vec2 vPos; varying float fTime; void main() { vec3 color = (vec3(vPos, 0.0)+1.0)/2.0; float dist = length(vPos); if(dist < 0.25*sin(fTime)+0.5) color = vec3(1.0)-vec3(vPos, 0.0); if (dist > 0.75*cos(fTime)+0.5) color = color + 1.0; gl_FragColor = vec4(color, 1.0); }
:(

Varför ska jag alltid göra allt jobb? Det är din tur att skriva kod nu.

Tar en liten paus i drönarna medan jag fixar NEAT😎

Dags att utnyttja 📈ℹ️k💳et


Koden skrivs i GLSL, ett språk för beräkningar på grafikkortet med inbyggd linjär algebra. Syntaxen är baserad på C och viktigt att veta är att man alltid måste använda doubles. (ex: x/2.0 och y*4.0)

Här är inputs (uniforms) du kan använda:

Uniform Värde
vec2 vPos Normaliserade 2D koordinater för pixeln
float fTime Tid sedan start (funkar bra med sin & cos för periodiska animationer)
vec2 vResolution Upplösningen på canvasen (w, h) = (480, 480)
vec3 vMouse 2D koordinater för musen (x, y) och click (z = 0.0, 1.0), normaliseras lätt med vResolution:

Alla uniforms skickas via vertex-shadern och har därför 'varying' istället för 'uniform'. Det gå att använda highp/mediump men behövs inte. Om du fattar så fattar du, kolla exemplen annars och lista ut det.

koordinatsystem

Röd: screenspace (vResolution & vMouse)
Blå: clipspace (vPos)

Säg till om jag ska fixa fler uniforms.

Gör nåt coolt! (Om du kan...)

Ex (copy-paste):

Basics vMouse och vResolution (tryck någonstans på bilden) Mandelbrot