1. Introducción a OpenGL
Informática Gráfica
¿Qué es OpenGL?
Open Graphics Library
Librería de funciones gráfica
Gestión de gráficos en 3D
Interfaz software para hardware gráfico
Libre y multiplataforma
Consta de unas 200 órdenes
Especificación de objetos
Generación de aplicaciones interactivas en 3D
2. ¿Qué es OpenGL?
Usos:
70% industria del videojuego
Reconstrucciones virtuales
Modelos arquitectónicos
…
Implementaciones
Mesa para Linux (freeware)
Windows XX
…
¿Qué es OpenGL?
Competidores
Directx 3D (Microsoft):
ni libre ni multiplataforma
Xbox, Xbox360
3. ¿Cómo funciona?
Comportamiento similar a una máquina de
estados
Un conjunto de variables representan el estado
actual (color, punto de vista, propiedades
material, …)
El valor de las variables se cambia mediante
instrucciones OpenGL
Las variables tienen un valor por defecto
¿Cómo funciona?
Caraterísticas técnicas:
Permite construir modelos geométricos (puntos,
líneas y polígonos) a través de un conjunto de
primitivas
No tiene funciones relacionadas con el manejo de
ventanas o entradas de usuario
4. Sintáxis
Conjunto de prefijos y sufijos
Los comandos utilizan el prefijo gl
Las constantes utilizan el prefijo GL_
Las funciones poseen una sintaxis particular
gl<orden>[234][sifd][v](args…)
s- short, i- interger, f- float, d- double
v- puntero a vector
Ej. glVertex*()
Librerías
OpenGL Utility Library (GLU)
Provee ciertas características de modelado
Es una parte estándar para cualquier implementación de
OpenGL
OpenGL Utility Toolkit Library (GLUT)
Kit de desarrollo independiente del sistema de ventanas
Funciones:
Manejo de ventanas
Funciones de visualización
Ejecución del programa
Funciones de eventos
Gestión de procesos en segundo plano
Funciones de primitivas
5. Estructura de un programa
OpenGL
Inicialización del sistema y de las ventanas
Dibujo de la escena
Bucle de gestión de eventos
Si cambia el dibujo, redibujar
Crear una ventana
Cinco instrucciones en el siguiente orden:
glutInit(int *argc, char **argv)
Inicializa la GLUT
glutInitDisplayMode(unsigned int mode)
especifica características de funcionamiento de la
aplicación
Modelo de color: se usará un modelo RGB (GLUT_RGB) o
uno basado en índices
si se trata de modelos de buffer sencillo o doble
(GLUT_DOUBLE)
Si se requiere algún otro buffer como son el stencil o la
profundidad (GLUT_DEPTH)
6. Crear una ventana
glutInitWindowPosition(int x, int y)
especifica la posición de la esquina superior izquierda
de la ventana en la pantalla
glutInitWindowSize(int x, int y)
especifica el tamaño de la ventana en pixels
glutCreateWindow (char *nombre)
crea la ventana y devuelve un identificador
La ventana no será visible hasta después de llamar a
la función glutMainLoop()
Inicializando la ventana
El sistema de coordenadas
glOrtho (izquierda, derecha, abajo, arriba, cerca.
lejos)
Crea una matriz de proyección de coordenadas y
la multiplica por la matriz de proyección actual
Ejemplo: glOrtho(-1,1,-1,1,-1,1)
Cerca y lejos será -1 y 1
7. Inicializando la ventana
Limpiar la ventana
glClearColor (r, g, b, a)
red, green, blue, canal alpha (0)
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
Limpia el buffer de color
Especificar el color
glColor3f(r,g,b)
Modelo RGB
Valores entre 0 y 1
Ejemplo: GlColor3f(1.0,0.0,1.0); // Genera el Color
Amarillo
8. Área de dibujo
Fijar un rectángulo de trabajo (view port)
dentro del cual se representará la escena
observada desde un punto de vista
determinado
glViewport (x, y, ancho, alto)
x, y determinan esquina inferior izquierda del área
gráfica rectangular.
Ancho, alto determinan la anchura y altura del
rectángulo respectivamente
Dibujar
Puntos, líneas y polígonos se definen como construcciones
sobre vértices
Para especificar un vértice se utiliza el comando glVertex*()
Para poder dibujar se necesita colocar cada vértice entre
glBegin() y glEnd().
A glBegin() se le pasa un argumento que determina que tipo de
primitiva va a dibujar con los vértices dados.
GL_POINTS: dibuja puntos
GL_LINES: dibuja líneas
GL_POLYGON: dibuja polígonos
…
Entre glBegin() y glEnd() hay restricciones de que comandos
openGL se pueden utilizar
9. Dibujar
Dibujando un polígono
Indicar qué se va a dibujar
glBegin(GL_POLYGON);
Especificar los vértices
glVertex2f(x0,y0);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
....
Indicar que se ha terminado
glEnd();
Dibujar
Completar el dibujo
void glFlush(void);
fuerza que los comandos previos de OpenGL
empiecen a ejecutarse, sin garantizar que se
completen en un tiempo finito.
void glFinish(void);
fuerza que TODOS los comandos previos de OpenGL
se terminen de ejecutar. Este comando no retorna
hasta que todos los efectos de los comandos previos
son realizados completamente