Publicado el 21 de Junio del 2018
739 visualizaciones desde el 21 de Junio del 2018
351,4 KB
19 paginas
Creado hace 12a (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
Comentarios de: Ayuda OpenGL - Introducción a la Computación Gráfica (0)
No hay comentarios