Sie sind auf Seite 1von 18

Introducción a OpenGL

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

_ Resultado. Carpetas para nuestros ficheros.

6
Modelo cámara sintética.
_ Modelo semántico que interpreta la escena

Geometría
Escena
Texturas
Luces
Proyección Transformaciones

Cámara Punto de vista.


Posición
Orientación
Frustrum…

7
GLUT: Dirigida a eventos de ventana

8
GLUT: Dirigida a eventos de ventana

9
Cabeceras

#include <windows.h>// Inclusión de variables de Windows


#include <glut.h>"// Inclusión de librerías GLUT
#include <GL/gl.h>// Inclusión de librerías GL
#include <GL/glu.h>// Inclusión de librerías auxiliares

Librerías a incluir glut32.lib, glaux.lib, se debe incluir en propiedades


del proyecto que desarrollemos a la hora de linkar vinculador.

10
main()

int main(int argc, char** argv)


{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(50, 50);
glutCreateWindow("UserInterface");
glutDisplayFunc(display);
myinit();
glutMainLoop();

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

glMatrixMode(GL_PROJECTION); //Matriz de la camara


glLoadIdentity();
gluOrtho2D(-10.0, -10.0, 10, 10.0); / /Proyeccion ortografica 2D
glMatrixMode(GL_MODELVIEW); // Inicializamos la matriz del modelo
glLoadIdentity(); //cargamos identidad
//Los objetos
glBegin(GL_POINTS);
glVertex2f(3.0, 2.0);
glVertex2f(5.0, 6.0);
glEnd();

glFlush(); vaciodo de Buffer


glutSwapBuffers();
_}
14
Funciones Glut Ejemplo
_ void glutIdleFunc(void (*func)(void));
_ *********
_ void Idle (void) {
_ fAngulo += 0.3f;
_ if(fAngulo>360)
_ fAngulo-=360.0f;
_ glutPostRedisplay(); // llama a display
_ }

void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));

// 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

GL_LINES connects pairs of points.

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

GL_POLYGON: Vertices define the vertices of a polygon. Polygons have


special properties that differ from line loops (e.g. you can fill in a polygon).
p1 p2

p4 p3 18

Das könnte Ihnen auch gefallen