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 coordenas

    uvN

    (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