PDF de programación - Introducción a la programación en OpenGL

Imágen de pdf Introducción a la programación en OpenGL

Introducción a la programación en OpenGLgráfica de visualizaciones

Publicado el 22 de Julio del 2017
416 visualizaciones desde el 22 de Julio del 2017
159,8 KB
18 paginas
Creado hace 9a (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)
  • Links de descarga
http://lwp-l.com/pdf5686

Comentarios de: Introducción a la programación en OpenGL (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad