OpenGL

Introducción a Open Graphic Library

Joseba Makazaga

Las librerias asociadas

Libreria básica: gl

Librería de utilidades: glu

Libreria de manejo de tareas del window manager: glut

Inicialización de la ventana

glutInit()

GlutInitDisplayMode (GLUT_DOUBLE|GLUT_RGB)

glutInitWindowPosition(x,y)

glutInitWindowSize(w,h)

glutCreateWindow(nombre)

... establecer eventos ...

glutMainLoop()

Eventos en la Ventana

glutDisplayFunc(display)

void display (void)

glutReshapeFunc(redimensionar)

void redimensionar(int w,int h)

glutKeyboardFunc(teclado)

void teclado(unsigned char c, int x, int y)

glutMouseFunc(raton)

void raton(int boton, int estado, int x, int y)

boton=GLUT_LEFT_BUTTON... state = GLUT_DOWN o UP

glutMotionFunc(arrastrar)

void arrastrar(int x, int y)

Menu Pop-up

menuID=glutCreateMenu( funpopup );

glutAddMenuEntry( "texto", val1)

...

GlutAttachMenu(GLUT_RIGHT_BUTTON);

void funpopup(int opt)

switch (opt)

{case val1: ...break;

case val2:... break; ...}

Funciones GL

Empiezan con gl

Seguido de nombre

Numero de parámetros

Tipo b(yte), s(hort), i(nt), f(loat), d(ouble)...

Modo: vector (v) o normal (nada)

glColor3fv(vector)

glVertex3d(doble1,doble2,doble3)

Gl como maquina de estados

Es una maquina de estados o modos

Permite cambios de estado:

glColor* para establecer el color

glClearColor* esblece color de borrado

glPointSize ...

Activar-desactivar: glEnable-glDisable

Preguntar valor actual

glGetBoolean*, glGetFloat* ...

glIsEnabled ...

Algunos modos de GL

glLineStipple(GLint factor, GLushort pattern)

glEnable( GL_LINE_STIPPLE )

glLineWidth(GLint zabalera)

glPolygonMode( face, mode )

GL_FRONT GL_BACK GL_FRONT_AND_BACK

GL_POINT GL_LINE GL_FILL

Dibujo de objetos geométricos

Forzar el dibujo: glFlush() o glutPostRedisplay()

Puntos, lineas, polígonos...

glBegin(tipoobjeto)

...

glEnd()

Entre Begin y end solo puede haber:

glVertex, glColor, glNormal, glEdgeFlag...

Objetos geométricos

Sistema de la Cámara

Posicion de la cámara: px,py,pz

Punto donde mira: mx,my,mz

Vector Up: ux,uy,uz

Matriz del cambio de sistema

glMatrixMode(GL_MODELVIEW)

glLoadIdentity()

gluLookAt(px,py,pz, mx,my,mz, ux,uy,uz)

Matriz de vista del modelo!

Proyecciones

Perspectiva

glMatrixMode(GL_PROYECTION)

glLoadIdentity()

glFrustum(izda,dcha,tope,abajo,near,far)

glFrustum equivale a:

gluPerspective(angulo, ratiowh,near,far)

Paralela: en vez de glFrustum

glOrtho(izda,dcha,tope,abajo,near,far)

Transformaciones

Obtienen la matriz y llaman a glMultMatrix de GL_MODELVIEW!

Traslación: glTraslate(p,q,r)

Escalado: glScale(p,q,r)

Rotación: glRotate(alfa,vx,vy,vz)

Matriz de transformación:

glLoadMatrix(double *m)

m1 m5 m09 m13

m2 m6 m10 m14

m3 m7 ...

2004-11-09T10:34:33