learn GLSL from zero
ToolsCrea con shadersShader MakerCrea shaders gratis en líneaToolkitObras de shaders listas para tu webSketcher LabPinta el hero de tu landing con shaders3D StudioEl editor Three.js en tu navegador
GamesJuega con shadersOnomatoShaderEscribe una palabra y explótalaThe WatcherUn ojo que te sigueAetherVidrio líquido con un ojo adentroBloomcoreUna palabra hace crecer un jardín de luzPyrokineAvienta fuego a la paredVoltaicLa pirámide lanza rayosSurfSurfea un océano de shader

Lección 1 de 10 · GLSL para principiantes

Hola, luz

Tu primera pieza. Un color. Millones de puntos de luz.

Tu primer pixel encendido. La GPU esperando instrucciones.

¿Qué es un shader?Un shader es un programa que corre en tu GPU, el chip gráfico de tu computadora. Tu pantalla está hecha de millones de puntos de luz. El shader decide de qué color se enciende cada uno. Esos puntos se llaman frags. Tu pantalla tiene millones. Eso es lo que vas a escribir aquí.

Lo que ves abajo es un fragment shader. El código decide el color, y la última línea, gl_FragColor, es la que lo enciende.

Leyendo el códigovoid main(): el punto de inicio. Todo shader arranca aquí.
vec3 col: una variable que guarda 3 números: rojo, verde, azul.
iri(): la fórmula de color. Cicla entre 7 colores.
T: el tiempo en segundos. Sigue creciendo, así que el color sigue cambiando.
0.15: qué tan rápido pasa el tiempo. Más grande = más rápido. En 0, el tiempo se detiene y el color se congela.
gl_FragColor: la salida final. Esto es lo que pinta el frag.
PruebaMueve el slider de Tiempo: en 0 el color se congela, súbelo y cicla cada vez más rápido. También puedes cambiar el 0.15 a mano, prueba 0.5 para que vuele o 0.02 para que respire lento.
Freebie

PULSE

Reemplaza todo el código con esto y ve cómo pulsa.
void main(){
  vec3 col = iri(T * 0.15);
  col *= .5 + .5 * sin(T);
  gl_FragColor = vec4(col, 1.);
}

¿Quieres que pulse más rápido? Cambia T por T * 3.. El punto después del 3 es importante. En shaders, los números siempre llevan punto: 3. no 3

El código

void main(){
  vec3 col = iri(T * 0.15);
  col *= 0.85;
  gl_FragColor = vec4(col, 1.);
}
close