Presentacion Shader†Based OpenGL Programing

Anuncio
Carlos Castillo, 04-36817
Juan García, 05-38207

Estructura general de un programa:
Inicializar
el estado
de
OpenGL
Configurar
y abrir una
ventana



Procesar
eventos de
usuario
Dibujar
una
imagen
Primitivas de OpenGL
GLUT – The OpenGL Utility Toolkit
“The Graphics Pipeline”
Graphics State
Application
Vertices
(3D)
Vertex
Vertex
Processor
Processor
Assembly
& Rasterization
Fragments
(pre(pre-pixels)
transformed,
Lit Vertices
(2D)
CPU
GPU
Pixel
Pixel
Processor
Processor
Final
pixels
(Color, Depth)
Video
Memory
(Textures)
RenderRender-toto-texture

También conocido como Glslang, es un lenguaje de programación
(similar a C/C++).

Creado por OpenGL ARB (Architecture Review Board) para crear
programas (llamados shaders) que serán ejecutados en la GPU.

GLSL permitió utilizar shaders más complejos y de tamaño variable.

Usar shaders mejora el despeño de cálculos de iluminación y
transformación de geometría.

Podemos transferir carga de trabajo, como el movimiento de
algunos gráficos, del CPU al GPU.

Se ejecutan sobre cada uno de
los
vértices
de
entrada

al
generado durante el proceso
procesador gráfico.


de rasterización.
Proporcionan un control general

Permite manipular fragmentos.
sobre todos los vértices.

Es un archivo que contiene el
Es un archivo fuente que
código fuente y ejecutará en el
contiene el código de entrada
procesador de fragmentos.
para el procesador gráfico.

Trabaja sobre cada fragmento
Es compilado y enlazado.
Vertex Shader

Es compilado, se genera un
ejecutable.
Fragment Shader
Vertex Shader
Fragments Shader

Es una herramienta capaz de trabajar con la
estructura de vértices de figuras modeladas
en 3D, y realizar operaciones matemáticas
sobre ella para definir colores, texturas e
incidencia de la luz.



Los datos de los vértices (posición, color,
coordenadas de textura) son cargados en el GPU.
Cada vértice genera una ejecución en el shader.
El shader arroja una posición que va a ser
interpolada por el rasterizador.
Color
Normal
Position
Texture coord
etc…
Texture data
Vertex
Shader
Modelview matrix
Material
Lighting
etc…
Custom variables
Per-vertex attributes
Color
Position
Custom variables

Por vértice:
◦ Transformación de los vértices
◦ Transformación de las normales
◦ Generación de las coordenadas de las texturas
◦ Transformación de las coordenadas de texturizado
◦ Iluminación
◦ Aplicación de color al material.

Es un programa ejecutado luego de la
rasterización que permite hacer diversas
transformaciones
como
cambiar
la
profundidad o trabajar con texels así como
calcular efectos de iluminación con gran
precisión. También es útil para modificar la
profundidad.



Los datos de los vértices (posición, color, coordenadas de
textura) son interpolados para luego formar los fragmentos .
Trabaja sobre cada fragmento generado (aplicación de
texturas, niebla, convoluciones, etc).
Cuando un conjunto de fragment shaders es compilado, se
genera un fragment shader ejecutable que trabaja sobre el
procesador de fragmentos.
Color
Texture coords
Fragment coords
Front facing
Texture data
Material
Lighting
etc…
Custom variables
Fragment
Shader
Fragment color
Fragment depth

Por fragmento:
◦ Las operaciones en valores interpolados
◦ Textura de acceso
◦ Textura aplicación
◦ Niebla
◦ Color suma
◦ Opcionalmente:
- Pixel zoom
- Escala y sesgo
- Color tabla de búsqueda
- Circunvolución

Traslación

Escalamiento

Rotación

Double Buffering

Depth Buffering

Iluminación

Mapeo de texturas


Height Fields
Cartoon shading
Uso de OpenGL y GLSL

Tipos basicos: float, int, bool.

Sampler: tipo int para manejo de texturas

vec2, vec3, vec4: Vectores de flotantes de dos,
tres y cuatro entradas respectivamente

ivec2, ivec3, ivec4: Vectores de enteros de dos,
tres y cuatro entradas respectivamente

bvec2, bvec3, bvec4: Vectores de bool de dos,
tres y cuatro entradas respectivamente

mat2, mat3, mat4: Matrices de flotantes de 2x2,
3x3 y 4x4 respectivamente

Librerías necesarias:
 Freeglut3: Alternativa open source para GLUT
 Freeglut3-dev
 Libglut3: Provee una interface para la creación de
ventanas con contenido en OpenGL y con manejo de
interacción con el usuario
 Libglut3-dev
 Libhugs-glut
 Glew (OpenGL Extension Wrangler): librería de C/C++
que permite cargar extensiones de OpenGL y saber
cuales de estas extensiones son soportadas en la
plataforma actual

Para compilar un programa usando las
librerías de Glew para un programa de
OpenGl, se usa:
 gcc –lGL –lglut –lGLEW example.c –o example

Y luego correr con:
 ./example

glCreateProgramObjectARB - Crea un programa al que luego
tendremos que asociar los shaders.

glCreateShader ObjectARB- Crea un shader (vertex o fragment)
al que luego tendremos que pasar el código.

glShaderSourceObjectARB - Pasa al shader el código.

glCompileShaderObjectARB - Compila el código que le hemos
pasado al shader.

glAttachShaderObjectARB - Asocia un shader a un programa.

glLinkProgramARB - Hace link del programa después de
asociarle un vertex y un fragment shader.

glUseProgramObjectARB- Indica a OpenGL que use un programa
para hacer render (pintar).

Obtener el código fuente del shader a partir de un archivo.

Crear los objetos shaders y el objeto programa.

Cargar los objetos shaders con el código leído del archivo
fuente.

Compilar los Objetos Shaders

Adjuntar los shaders al objeto programa.

Ligar el objeto programa con nuestra aplicación.

Indicar a nuestra aplicación que utilice nuestro objeto
programa en lugar de las funciones de OpenGL.

Definir los objetos de los shaders y el
programa:

Obtener el código fuente del programa:

Crear los objetos Shaders y el programa:

Agregar el codigo fuente a los shaders

Compilar los Shaders

Enlazar los shaders al programa


Hacer link de nuestro programa a la
aplicación y correr
Si se desea, se puede eliminar los shaders
Descargar