Auxiliar 2

Introducción a OpenGL

Vicente González
Julieta Coloma

Contexto

Pasen contexto

La escena

  • Objetos
    • Son los actores de la escena
    • Manejar geometría, transformaciones, texturas, material y física
  • Cámara
    • Son los ojos por los que se ve la escena
    • Manejar posición y perspectiva
  • Luces
    • Son lo que le da color a la escena
    • Manejar posición, tipo de fuente, intensidad, sombras

La escena

Pipeline

  • Una serie de pasos para obtener la imagen
  • Proceso complejo que involucra muchos cálculos
  • Se puede alterar en ciertas etapas
    • Vertex Shader
    • Tesellation
    • Geometry Shader
    • Fragment Shader

Pipeline

  • Una serie de pasos para obtener la imagen
  • Proceso complejo que involucra muchos cálculos
  • Se puede alterar en ciertas etapas
    • Vertex Shader
    • Tesellation
    • Geometry Shader
    • Fragment Shader

Pipeline

Se resume a lo siguiente:

  1. Vertex shading: Colorear cada vértice
  2. Projection: Proyectar los vértices en la escena
  3. Clipping: Ajustar la geometría según lo que se ve en realidad
  4. Screen Mapping: Pasar de coordenadas uniformes a las coordenadas de la pantalla
  5. Rasterization: Discretizar la imagen
  6. Pixel processing: Colorear / procesar cada píxel

Shaders

Vertex Shader

  • Se encarga de definir los vértices desde la memoria
  • Actúa simultáneamente en cada vértice
  • Recibe como input los datos a utilizar
  • Debe definir la posición del vértice
  • Puede pasarle información a los siguientes pasos

Shaders

Fragment Shader

  • Se encarga de definir el color de los píxeles
  • Actúa simultáneamente en cada píxel
  • Debe definir el color final del píxel
  • Puede recibir información a desde los pasos anteriores

Problemas

Dibujemos un círculo!

P1 — Generar un círculo

Cree la siguiente función:

def create_circle(x, y, radius) 

La cual toma:

  • La posición del centro del círculo
  • El radio del círculo

Y retorna un arreglo con las posiciones de cada vértice para formar el círculo

P2 — Añadir color

Ahora que tiene su círculo cambie la función anterior para incluir color:

def create_circle(x, y, r, g, b, radius) 

Donde \((r, g, b)\) son las componentes de color del círculo y tienen un valor de 0 a 1.

Ahora la función debe incluir el color de cada vértice para formar el círculo

P3 — Agregar indices

Su función actual hace uso de mucha memoria de manera innecesaria, usé la función de Pyglet shader.vertex_list_indexed la cual recibe adicionalmente una lista de índices los cuales indican que vértices forman un triángulo.

Para crear esa lista programe la función:

def create_circle_indices()

P4 — Un poquito de movimiento

Ahora que tiene todo listo y bonito, pruebe añadir las siguientes animaciones:

  1. Una en la cual el círculo crece y luego se empequeñece
  2. Una en la cual el se mueve de izquierda a derecha
  3. Una en la cual hay 2 círculos bailando (use su imaginación)

Fin

Ver otras auxiliares