Publicado el 22 de Julio del 2017
616 visualizaciones desde el 22 de Julio del 2017
159,8 KB
18 paginas
Creado hace 13a (10/03/2011)
Introducción a la
programación en
OpenGL
¿Qué es OpenGL?
¿Qué es OpenGL?
● Es una interfaz para la generación de gráficos
(Graphics rendering API)
● Imágenes de alta calidad generadas a partir de
primitivas geométricas.
● Independiente del sistema de ventanas
● Independiente del sistema operativo.
¿Qué NO es OpenGL?
¿Qué NO es OpenGL?
● Un sistema de ventanas.
● Un manejador de eventos.
● Un sistema de animación de objetos.
● Un sistema que controla la interacción entre
objetos.
● Un sistema de base de datos de objetos
tridimensionales.
● Etc.
¿Que provee OpenGL?
¿Que provee OpenGL?
● Un conjunto de funciones que controlan la
configuración del sistema de dibujado.
● Un sistema de proyección que permite
especificar objetos en 3 dimensiones y llevarlos
a coordenadas de pantalla.
● Un conjunto de funciones para realizar
transformaciones geométricas que permiten
posicionar los objetos en el espacio.
● … y pocas cosas más!
Otras librerías
Otras librerías
● GLU (OpenGL Utility Library) es un conjunto de
funciones que simplifican el uso de OpenGL
para especificar la visual, construcciones
simplificadas de superficies cuadráticas (entre
otras cosas).
● SDL: (Simple DirectMedia Library): es una
librería multimedia multiplataforma que ofrece
funcionalidad para manejo de ventanas, lectura
de teclado, reproducción de sonido, etc.
SDLSDL
● Presenta varios sub-sistemas que pueden ser
inicializados de forma independiente.
● En el ejemplo se presenta la inicialización del sub-
sistema de video.
If( SDL_Init(SDL_INIT_VIDEO) == -1 )
{
fprintf( stderr, “[Video Error]: %s\n”, SDL_GetError() );
}
SDLSDL
● Para configurar el modo de video y resolución
se debe utilizar la función SDL_SetVideoMode.
● Se puede configurar a SDL para dibujar con
OpenGL en vez de usar las primitivas de SDL.
If( SDL_SetVideoMode(640,480,32,SDL_OPENGL) == NULL )
{
fprintf( stderr, “[Video Error]: %s\n”, SDL_GetError() );
SDL_Quit();
exit(1)
}
SDLSDL
● SDL_Quit(): Libera todos los recursos usados
por SDL.
SDL_PollEvent(&evento): se fija si ha
sucedido algún evento y devuelve
inmediatamente. En evento.type está el tipo de
evento sucedido.
● Uint8* SDL_GetKeyState(NULL): devuelve el
estado completo del teclado en un array. Se
pueden utilizar constantes de SDL para
especificar las posiciones en dicho array.
● Ej: SDLK_a se corresponde con la tecla “a”
OpenGL: Notas generales
OpenGL: Notas generales
● El prefijo de las funciones indican la librería a la
que pertenece.
● Ej: glColor3f, gluPerspective, etc.
● El postfijo de las funciones indican el tipo de
datos con los que trabaja
● Ej: glVertex3iv recibe vértices definido con tres
coordenadas de tipo int en formato vector.
● Ej: glTexCoord2f recibe una coordenada de
textura compuesta por dos valores de tipo float.
OpenGL: Notas generales
OpenGL: Notas generales
● Las constantes se escriben en mayúsculas.
● Ej: SDL_VIDEO_INIT, GL_DEPH_TEST, etc.
● Encabezados
#include “SDL.h”
#include “SDL_opengl.h”
● Al incluir el segundo encabezado se resuelven
conflictos de nombres dependientes de la
plataforma.
OpenGL: Notas generales
OpenGL: Notas generales
● OpenGL es una máquina de estados!
● El efecto de cada comando queda definido por el
estado actual de dibujado.
● Los estados son banderas que especifican que
funcionalidades están habilitadas/deshabilitadas y
cómo se deben aplicar.
● Existen datos internos que son utilizados para
determinar cómo un vértice debe ser transformado,
iluminado, textureado, etc.
Estructura del programa
Estructura del programa
● Main:
Abrir la ventana y configurar las librerías.
Inicializar estado inicial de OpenGL
Loop principal
● Loop principal:
Chequear eventos y tomar decisiones
Actualizar el sistema según el tiempo que pasó
Redibujar
● Redibujar:
Limpiar los buffers (color, z-buffer, etc.)
Cambiar estado de dibujado y dibujar
Loop principal
Loop principal
● Para dar la ilusión de movimiento (al igual que
en el cine) se genera una secuencia de
imágenes estáticas levemente diferente.
● Frame rate: cantidad de fotogramas (frames)
que se presentan por segundo.
● Las distancias que los objetos se mueven entre
un frame y el siguiente puede depender tiempo
que ha transcurrido (o no).
Loop principal
Loop principal
● Si el movimiento de los objetos es
dependiente del frame rate, al cambiar de
hardware los objetos van a demorar más (o
menos) para ir desde un punto a otro en la
escena.
● Si el movimiento es independiente del frame
rate, al cambiar de hardware los objetos van a
demorar lo mismo para ir de un punto a otro.
● Lo que cambia es la cantidad de cuadros
intermedios.
Dibujando primitivas
Dibujando primitivas
● Una forma en la que se dibujan primitivas
utilizando OpenGL es indicando los datos que
definen a cada vértice
● Posición, color, coordenadas de textura, etc.
● Dado que OpenGL es una máquina de estados,
tenemos que cambiar al estado correcto.
glBegin( primitiveType );
//Definición de vértices
glEnd();
Tipos de Primitivas
Tipos de Primitivas
● GL_POINTS
● GL_LINES
● GL_LINE_STRIP
● GL_LINE_LOOP
● GL_POLYGON
● GL_TRIANGLES
● GL_TRIANGLE_STRIP
● GL_TRIANGLE_FAN
● GL_QUADS
● GL_QUAD_STRIP
Transformaciones
Transformaciones
● La transformación que se le aplica a un vértice
antes de dibujarlo en pantalla queda definida
por el estado de dos matrices:
glMatrixMode( GL_PROJECTION );
glMatrixMode( GL_MODELVIEW );
● GL_PROJECTION: definición de las
características de la cámara.
● GL_MODELVIEW: transformaciones sobre los
objetos 3D de la escena.
Transformaciones
Transformaciones
● glLoadIdentity(): carga la transformación
identidad.
● glTranslatef(x,y,z): traslación según el
vector definido por (x,y,z)
● glRotatef(angle,x,y,z): realiza una
rotación de angle grados según el eje (x,y,z)
● glScale(x,y,z): escala cada eje
dependiendo del valor de (x,y,z)
Comentarios de: Introducción a la programación en OpenGL (0)
No hay comentarios