11.07.2015 Views

Download document (10.35 MB) - Escuela Superior de Informática ...

Download document (10.35 MB) - Escuela Superior de Informática ...

Download document (10.35 MB) - Escuela Superior de Informática ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

148 Capítulo D. Código fuente77 int r; /* Componente roja <strong>de</strong>l color */78 int g; /* Componente ver<strong>de</strong> <strong>de</strong>l color */79 int b; /* Componente azul <strong>de</strong>l color */80 } TColorEsqueleto;Funciones más relevantes <strong>de</strong> openGLFunctions.c1 /*********************************************************************2 * Funcion: calculaProyeccion3 * Descripcion: Calcula en la matriz <strong>de</strong> proyeccion; situando el4 * origen en el punto don<strong>de</strong> <strong>de</strong>bemos dibujar.5 * Entradas: Ninguna.6 * Salidas: Ninguna.7 ***********************************************************************/8 void calculaProyeccion(void)9 {10 float dx, dy, dz; /* Dimensiones <strong>de</strong> la caja que vamos a usar*/11 float diagonal; /* Diagonal <strong>de</strong>l suelo <strong>de</strong> la caja */12 float distCamMundo; /* Distancia <strong>de</strong> la camara al origen */13 float zCerca, zLejos; /* Determinan los planos <strong>de</strong> recorte en Z */14 float relacAspecto; /* Relacion entre el ancho y alto <strong>de</strong>l Widget */1516 glViewport(0,0,ventanaAncho,ventanaAlto);17 glMatrixMo<strong>de</strong>( GL_PROJECTION );1819 glLoadI<strong>de</strong>ntity();2021 /* Dimensiones <strong>de</strong> la caja que vamos a usar */22 dx = maxx - minx;23 dy = maxy - miny;24 dz = maxz - minz;2526 diagonal = sqrt(dx*dx + dy*dy + dz*dz);2728 /* Usamos el doble <strong>de</strong> la diagonal <strong>de</strong> la caja, para29 que la camara nunca entre en el mundo durante la rotacion. */30 distCamMundo = 2*diagonal;3132 /* distCamMundo es ahora la distancia <strong>de</strong>s<strong>de</strong> la camara al33 origen <strong>de</strong>l mundo. Estas distancias son escogidas para que34 el mundo este situado ENTRE los planos <strong>de</strong> recorte en Z. */35 zCerca = distCamMundo - 1.00001*diagonal/2;36 zLejos = distCamMundo + 1.00001*diagonal/2;3738 /* Trasladamos el plano <strong>de</strong> imagen. */39 glTranslatef(-2*trans[0]/ventanaAncho,-2*trans[1]/ventanaAlto,0);4041 /* Escalamos las coor<strong>de</strong>nadas X e Y, pero no la Z */42 glScalef(escala,escala,1);4344 relacAspecto = (float)ventanaAncho/ventanaAlto;4546 /* Matriz <strong>de</strong> perspectiva, utilizando los planos <strong>de</strong> recorte <strong>de</strong>47 cercanía y lejania. */48 gluPerspective(fovy,relacAspecto,zCerca,zLejos);4950 /* Tasladamos la camara en el eje Z (apuntando al origen) */51 glTranslatef(0,0,-distCamMundo);52

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!