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 8 de 10 · GLSL para principiantes

La onda

sin() de la posición. Patrones con una función.

Hace dos lecciones le aplicaste sin() al tiempo y el brillo subía y bajaba. Ahora le aplicas sin() a la posición, y aparecen rayas.

Una onda. Infinita. La base de todo lo que viene.

¿Por qué? Porque sin(p.x * 10) oscila entre -1 y 1 a medida que p.x cambia. Así que de izquierda a derecha, el valor sube, baja, sube, baja... y eso son rayas.

El número 8Es la frecuencia. Más alto, más rayas. Más bajo, menos rayas. Pruébalo: cambia 8. por 50. (muchísimas rayas finas) o por 3. (pocas rayas anchas).

Le sumamos + T * 1.2 al final para que las rayas se muevan. Sin esa parte son rayas estáticas. Con ella son rayas que fluyen. El 1.2 es la velocidad.

PruebaCambia p.x por p.y y las rayas se vuelven horizontales. Cambia el + T * 1.2 por - T * 1.2 y las rayas van en la dirección contraria. Cambia el 1.2 a 5. y vuelan; a 0.2 y apenas se arrastran.

El código

void main(){
  vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
  float v = sin(p.x * 8. + T * 1.2) * .5 + .5;
  vec3 a = vec3(0.08, 0.02, 0.12);
  vec3 b = vec3(0.95, 0.35, 0.55);
  vec3 col = mix(a, b, v * v);
  col *= 0.85 + 0.15 * v;
  col = hueShift(col, 0.0);
  gl_FragColor = vec4(col, 1.);
}
close