Beruflich Dokumente
Kultur Dokumente
1
Introducción
• OpenGL www.opengl.org mantenida por el grupo Vulkam.
• Librería escrita C.
• Manipulación de escenas 3D.
• Es independiente de nuestro hardware.
• Hasta V1.3 pipe fija.
• La versión que introduce más cambios es la 2.0.
• Da soporte a varios lenguajes para la programación de la GPU (programación).
La gestión de los vértices y matrices cambia.
• Actual 4.6
• Van añadiendo nuevas funcionalidades.
• Trabajaremos con v.2-2.0 ya que nos permitirá entender mejor lo que pasa para
versiones posteriores solo es adaptar la gestión de matrices y vértices.
• El objetivo no es aprender openGl sino la base de computación gráfica.
2
OpenGL
• OpenGL es una API, un interfaz gráfico, con el hardware por tanto no tiene
gestor de ventanas y precisa de librerías auxiliares. NO windows, NO Input,
No Control.
• Se necesitan librerías auxiliares para generar el contexto de trabajo,
utilizaremos librerías genéricas glu, glaux y glut.
Glut (1996-2000) 3.7: The OpenGL utility toolkit. Hay una versión free
que es más actual pero para nuestro caso no es necesario.
https://www.opengl.org/resources/libraries/glut/
Esta librería se utiliza para comunicar el openGl con el entorno de
ventanas. (e.g. windows or Mac OS). Hay un paquete para cada
sistema operativo. glut.h (cabecera) glut32.lib (.lib) glut32.dll (librería
dinámica).
Freeglut 2.8.1 Released [5 April 2013]
glaux Gl & Glu: utiliza las cabeceras y librerías glaux, glu, .h, .lib, dll.
3
Programación con Visual studio
_ Visual C++ o .NET. (con la versión que os podáis descargar gratuitamente.)
_ Nuevo proyecto y dentro de éste, un proyecto nuevo Win32 Console y le das nombre.
4
Programación bajo Windows
_ En Configuración de la aplicación.
_ Proyecto vacío
5
Programación bajo Windows
6
Modelo cámara sintética.
_ Modelo semántico que interpreta la escena
Geometría
Escena
Texturas
Luces
Proyección Transformaciones
7
GLUT: Dirigida a eventos de ventana
8
GLUT: Dirigida a eventos de ventana
9
Cabeceras
10
main()
return 0;
}
11
Diagrama
• Inicialización.
• Dibujo en la consola.
• Detección de eventos.
12
myInit() Registro de Eventos
void myinit(void)
{
glutDisplayFunc(Display);
//Funcion de Dibujo
glutIdleFunc(Idle);
//Funcion de desocupada
glutKeyboardFunc(tecla);
//Funcion que mira el teclado
glutMouseFunc(raton);
//Funcion de raton
glutReshapeFunc(reshape);
//cambia el tamaño de la pantalla
glutTimerFunc(empieza, funcion, 0);
//ejecuta funcion cada tanto
glutSpecialFunc(funcion);
//Teclas especiales
13
glutDisplayFunc(Display);
void glutDisplayFunc(void (*func)(void));
**
void Display (void) {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Color fondo
glClearDepth( 1.0f ); //Buffer profundidad
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Limpieza buffer
// Funcion de teclado
void tecla(unsigned char c, int x, int y) {
//x, y es donde esta el raton cuando se pulsa la tecla
switch (c) {
case 'a': // Se ha pulsado la tecla 'a'
break;
case 'b': // Se ha pulsado la tecla 'b'
break;
case 27: // Se ha pulsado Esc.
exit(0); // Salimos del programa
break;
default:
break;
}
glutPostRedisplay(); // Si se ha modificado algo se redibuja
}
15
OpengGL primitivas: Vertices
OpenGL define todos sus elementos en términos de vértices
(points).
2D superficies son polígonos definidas por vértices
3D superficies son grupos de polígonos
Example: (5, 6)
glBegin(GL_POINTS);
glVertex2f(3.0, 2.0);
glVertex2f(5.0, 6.0); (3, 2)
glEnd();
2D image plane
16
Conectar vértices
glBegin(GL_LINES);
glVertex2f(x1, y1);
(x2, y2)
glVertex2f(x2, y2);
glVertex2f(x3, y3);
(x1, y1)
glVertex2f(x4, y4);
(x3, y3)
glEnd();
(x4, y4)
17
Otras funciones de dibujo
GL_LINE_STRIP: Connect each consecutive point with previous one.
p2 p4 p6
p1
p3 p5
GL_LINE_LOOP: Same as line strip, except also connects last point with
first point. p3
p1 p2
p4
p4 p3 18