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
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)
  • 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...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad