Bloque 1
Nociones básicas de GLSL
NOTAS
FRAGMENT SHADER: entra posición sale color.
Declaración de variables uniformes: variables que contienen información "externa" que le programadore le puede pasr. Ejemplo: tiempo.
void () main {..}: cuerpo principal de ejecución.
gl_{...}: son variables provistas para interacturar (leer y escribir información) en distintos momentos de la pipeline gráfica. Ejemplos:
gl_FragCoord: permite leer las coordenadas del píxel.
gl_FragColor: permite escribir el color que se va a renderear.
Introducimos ejes de coordenadas y funciones básicas
NOTAS
Cada thread “obtiene” información de la posición mediante
gl_FragCoord
¿Cuál es el valor máximo que puede tomar? ¿Y el mínimo?¿Cómo describimos la posición del píxel? ¿Es única?
Sistemas de representación del espacio:
NombreOutputRangoOrigen de coordenasuvN
(x,y)
[0,1]x[0,1]
esquina inferior izquierda
uv
(x,y)
[-1,1]x[-1,1]
centro de la pantalla
Introducimos las funciones:
cos(), step(), smoothstep(), length(), y mix()
Transformaciones del espacio:
traslación, rotación, escalar(zoom in-zoom out)
HELPERS (CHECKPOINT 1)
vec2 uv(){
/* Devuelve las posiciones del canvas en rango [-1.,1.]x[-1.,1.] */
vec2 pos = gl_FragCoord.xy/resolution *2.- 1. ;
pos.x *= resolution.x/resolution.y;
return pos;
}
vec2 uvN(){
/* Devuelve las posiciones del canvas en rango [0.,1.]x[0.,1.] */
vec2 pos = gl_FragCoord.xy/resolution;
return pos;
}
float verEjes(vec2 pos){
float ejes;
ejes += 1.-step(0.009, distance(pos.x,0.));
ejes += 1.-step(0.009, distance(pos.y,0.));
return ejes;
}
HELPERS (checkpoint 2)
vec3 tablero(vec2 pos){
return smoothstep(vec3(0.),vec3(0.001),sin(pos.xxx*20.)*sin(pos.yyy*20.));
}
vec2 rotacion (vec2 pos, float cantidad){
return pos * mat2(cos(cantidad),sin(cantidad),-sin(cantidad),cos(cantidad));
}
Last updated