PDF de programación - Ayuda OpenGL - Introducción a la Computación Gráfica

Imágen de pdf Ayuda OpenGL - Introducción a la Computación Gráfica

Ayuda OpenGL - Introducción a la Computación Gráficagráfica de visualizaciones

Publicado el 21 de Junio del 2018
590 visualizaciones desde el 21 de Junio del 2018
351,4 KB
19 paginas
Creado hace 11a (26/04/2013)
Introducción a la Computación Gráfica
Ayuda OpenGL

Roberto Guerrero
Roberto Guerrero
Univ. Nac. de San Luis
Univ. Nac. de San Luis
Marzo 2013
Marzo 2013

Independencia de Dispositivos

• Ambiente y Herramientas
Ambiente y Herramientas

x

y

• Ejemplo:

line(100, 50, 150, 80);
line(150, 80, 0, 290);

x

y



y

x

• Cada ambiente posee sus propias herramientas para producir sus primitivas
Cada ambiente posee sus propias herramientas para producir sus primitivas
de dibujo.
de dibujo.

2

Comienzo…

• OpenGL es una biblioteca gráfica que facilita la interacción con
OpenGL es una biblioteca gráfica que facilita la interacción con
hardware gráfico especializado y habilita el desarrollo de
hardware gráfico especializado y habilita el desarrollo de
aplicaciones independientes del hardware.
aplicaciones independientes del hardware.



Dos escenas generadas con OpenGL....

Nota: referencias según el libro OpenGL Programming Guide, 3rd Edition ver. 1.2
(“The Red Book”).

3

Reseña

• Primitivas Básicas en OpenGL
Primitivas Básicas en OpenGL
• GLUT y ciclo visualización / interacción
GLUT y ciclo visualización / interacción
• Transformaciones y Vistas
Transformaciones y Vistas
• Otras primitivas de Desarrollo
Otras primitivas de Desarrollo



4

Especificar Vértices de Objetos (C2 p42)

• Cada objeto es especificado por vértices
Cada objeto es especificado por vértices
glVertex3f (2.0, 4.1, 6.0); // especifica el vértice en la coord. x, y, z (2.0, 4.1, 6.0).
glVertex3f (2.0, 4.1, 6.0);
// especifica el vértice en la coord. x, y, z (2.0, 4.1, 6.0).
// El “3f” significa 3 coord. de punto flotante.
// El “3f” significa 3 coord. de punto flotante.

• Otro ejemplo:

glVertex2i (4, 5);
glVertex3fv (vector);

// 2 enteros para x e y, z = 0.
// float vector[3] = {5.0, 3.2, 5.0};

• Especificación de Color, afecta a cualquier vértice
Especificación de Color, afecta a cualquier vértice
• glColor3f (0.0, 0.5, 1.0); // no Rojo, Verde media-intensidad, Azul color total.
Los Vértices se especifican sólo entre glBegin(
Polígonos: en orden de las agujas del reloj.
Polígonos: en orden de las agujas del reloj.
• glBegin (GL_TRIANGLES);

• Los Vértices se especifican sólo entre



glVertex2i (0, 0);
glVertex2i (2, 0);
glVertex2i (1, 1);
glEnd();

glBegin(mode)

mode) y

glEnd(), ,
y glEnd()

5

Tipos Primitivos de glBegin (C2, p44)

• Puntos
Puntos

Líneas
Líneas

Triángulos
Triángulos
• Cuádruplas
Cuádruplas
• Polígonos
Polígonos

GL_POINTS
GL_POINTS
GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP
GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP
GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN
GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN
GL_QUADS, GL_QUAD_STRIP
GL_QUADS, GL_QUAD_STRIP
GL_POLYGON
GL_POLYGON

glBegin(GL_LINES);
[conj. de glVertex];
glEnd();

glBegin(GL_QUADS);
[conj. de glVertex];
glEnd();



6

GLUT – OpenGL Utility Toolkit (Apéndice D)

• GLUT es una biblioteca que permite la administración de ventanas y
GLUT es una biblioteca que permite la administración de ventanas y
eventos del sistema, en forma independiente de la plataforma.
eventos del sistema, en forma independiente de la plataforma.

Comienzo:
Comienzo:
int main (int argc, char *argv[])
int main (int argc, char *argv[])
{{

glutInit(&argc, argv); // Pasa argumentos originales a GLUT
glutInit(&argc, argv);
// Pasa argumentos originales a GLUT
glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize (windowWidth, windowHeight);
glutInitWindowSize (windowWidth, windowHeight);
glutInitWindowPosition (0, 0);
glutInitWindowPosition (0, 0);
glutCreateWindow (“Programa de Prueba");
glutCreateWindow (“Programa de Prueba");
// Inicializa estados (codigo propio).
SetStates();
SetStates();
// Inicializa estados (codigo propio).
RegisterCallbacks(); // Seteo rut. de atención de eventos (cod. propio).
RegisterCallbacks();
// Seteo rut. de atención de eventos (cod. propio).
// Transfiere el control a GLUT. No Retorna.
glutMainLoop();
glutMainLoop();
// Transfiere el control a GLUT. No Retorna.
return 0;
return 0;



}}

7

GLUT: Atención de Eventos

• Registro de funciones que son llamadas cuando un evento
Registro de funciones que son llamadas cuando un evento
ocurre.
ocurre.

Ejemplos:
Ejemplos:

glutDisplayFunc( Display );
glutDisplayFunc( Display );
glutKeyboardFunc( Keyboard );
glutKeyboardFunc( Keyboard );
glutReshapeFunc( Reshape );
glutReshapeFunc( Reshape );
glutMouseFunc( Mouse );
glutMouseFunc( Mouse );
glutMotionFunc( MouseDraggedFunc );
glutMotionFunc( MouseDraggedFunc );
glutIdleFunc( Idle );
glutIdleFunc( Idle );



// cuando hay que dibujar
// cuando hay que dibujar
// detecta tecla apretada
// detecta tecla apretada
// modificación de ventana
// modificación de ventana
// cambios en botón de mouse
// cambios en botón de mouse
// movimiento de mouse
// movimiento de mouse
// eventos en estado ocioso
// eventos en estado ocioso

8

OpenGL – Buffers de Rendering

• Los Buffers se utilizan para almacenar Color y Profundidad.
Los Buffers se utilizan para almacenar Color y Profundidad.
• El buffer de profundidad, permite realizar la eliminación de caras

ocultas, de manera que se puedan ordenar los objetos en el espacio
3D.

• Doble buffering:
Doble buffering:
• Se dibuja en el back buffer mientras el front buffer esta siendo

mostrado.



nuevamente en el nuevo back buffer.

• Cuando finaliza el dibujado, se intercambian, y se comienza a trabajar
• glutSwapBuffers(); // se llama al finalizar el dibujado
• Limpieza de buffers:
Limpieza de buffers:
// Limpia la pantalla y el buffer al color establecido.
// Limpia la pantalla y el buffer al color establecido.
glClearColor (0.0, 0.0, 0.0, 0.0);
glClearColor (0.0, 0.0, 0.0, 0.0);
// Limpia ambos buffers.
// Limpia ambos buffers.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

9

OpenGL – Transformaciones y Vistas (C3)

OpenGL tiene 3 modos diferentes de matrices de Rendering:
OpenGL tiene 3 modos diferentes de matrices de Rendering:

• GL_MODELVIEW
• GL_PROJECTION
• GL_TEXTURE
• Ej: cuando se desea trabajar en modo matríz de proyección:

glMatrixMode(GL_PROJECTION);

• La matríz

• La matríz

• La matríz

Projection se utiliza para realizar transformaciones de
se utiliza para realizar transformaciones de

Modelview se utiliza para ejecutar transformaciones de
se utiliza para ejecutar transformaciones de

La matríz Modelview
objetos.
objetos.
La matríz Projection
Perspectiva. Usualmente se realiza una sola vez al comienzo.
Perspectiva. Usualmente se realiza una sola vez al comienzo.
La matríz Texture

Texture se utiliza para elaborar Texturas.
se utiliza para elaborar Texturas.



10

OpenGL: Matríz Modelview

• Transforma el Punto de Vista y los Objetos dentro de una escena.
Transforma el Punto de Vista y los Objetos dentro de una escena.
• Ejemplo:
Ejemplo:
glMatrixMode(GL_MODELVIEW);// setea la matríz
glMatrixMode(GL_MODELVIEW);
// setea la matríz
glLoadIdentity();
glLoadIdentity();
// carga la matríz identidad
// carga la matríz identidad
glTranslatef(10.5, 0, 0);
glTranslatef(10.5, 0, 0);
// traslada 10.5 unidades en eje x
// traslada 10.5 unidades en eje x
glRotatef(45, 0, 0, 1);
glRotatef(45, 0, 0, 1);
// rota 45 grados sent. reloj sobre eje z
// rota 45 grados sent. reloj sobre eje z
DrawCube();
DrawCube();
// func. que dibuja un cubo en el origen
// func. que dibuja un cubo en el origen
• Donde queda el objeto?
Donde queda el objeto?
• Resp.: sobre el eje x, rotado 45 grados SR. Imágen en página
Resp.: sobre el eje x, rotado 45 grados SR. Imágen en página
107, fig. 3-4.
107, fig. 3-4.
NotaNota: las
justo antes de DrawCube()
justo antes de
Se puede utilizar gluLookAt(…)
traslaciones para modificar el punto de vista.
traslaciones para modificar el punto de vista.

operaciones se multiplican a derecha,  la transformación
la transformación

junto a las rotaciones y
(pág. 119) junto a las rotaciones y

: las operaciones se multiplican a derecha,

DrawCube() es la primera que se ejecuta.
es la primera que se ejecuta.



• Se puede utilizar

gluLookAt(…) (pág. 119)

11

OpenGL: Matríz de Projection

• Habilita una Proyección de Perspective. Como los objetos son
Habilita una Proyección de Perspective. Como los objetos son
proyectados en pantalla. (pág. 123)
proyectados en pantalla.
(pág. 123)

• Opciones:
Opciones:
• glFrustrum (...);
• gluPerspective (fovy, aspect, near, far);

// crea el cono de proyección definido por el usuario

// calcula el cono de proyección, dado el ángulo del punto de vista, relación de aspecto y planos
de corte de frente y fondo.

• gluOrtho2D (...);

// crea una proyección ortográfica paralela para 2D.



• Ejemplo:
Ejemplo:
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glLoadIdentity();
gluPerspective(64, (float)windowWidth / (float)windowHeight, 4, 4096);
gluPerspective(64, (float)windowWidth / (float)windowHeight, 4, 4096);

12

OpenGL – Seteo de Estados

• OpenGL es una

máquina de estado

OpenGL es una máquina de
estado: los polígonos son afectados
: los polígonos son afectados
por el color corriente, la transformación, el modo de dibujo, etc..
por el color corriente, la transformación, el modo de dibujo, etc..
Habilitar y deshabilitar características tales como, iluminación,
• Habilitar y deshabilitar características tales como, iluminación,
texturado y matizado Alfa (alpha blending).
texturado y matizado Alfa (alpha blending).
• glEnable (GL_LIGHTING); // habilita iluminación (NO default)

Olvidar habilitar algo es un error de codificación muy común.
• Olvidar habilitar algo es un error de codificación muy común.



13

OpenGL: Normales e Iluminación



• OpenGL puede simular la iluminación a partir de información de
OpenGL puede simular la iluminación a partir de información de
geometr
  • Links de descarga
http://lwp-l.com/pdf12036

Comentarios de: Ayuda OpenGL - Introducción a la Computación Gráfica (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