martes, 13 de marzo de 2012


Proyección ortogonal
De las proyecciones que hemos manejado mayormente han sido ortogonales. Antes que nada una proyección ortogonal es aquella que nos define un volumen a la vista de un paralepipédo. Las características de esta proyección es que es indispensable el tamaño de los objetos y es independiente de la distancia a la que este el observador de la imagen.
ejemplo




Proyeccion perspectiva
Esta proyeccion da la sensacion de profundidad porque el tamaño de los objetos no depende de la distancia del observador, porque para conseguir este efecto se debe definir una proyeccion perspectiva. Debido a que esta proyeccion define el volumende la vista.
 
Como hemos visto en clase OpenGL proporciona funciones para controlar la traslación, rotación y escalado. Estas tranformaciones se pueden representar como matrices 4x4 ordenadas como vectores columna.
Las  funciones que implementan las transformaciones es:

void glTranslate{fd}(TIPO x, TIPO y, TIPO z);
void glTranslatef(float x, float y, float z);
void glTranslated(double x, dluble y, double z);
void glRotate{fd}(TIPO angulo_en_grados, TIPO x, TIPO y, TIPO z);
void glScale{fd}(TIPO sx, TIPO sy, TIPO sz);

Ejemplo de matriz                                                              Ejemplo de matriz de rotación
De traslación
 
 




4. pila de matrices en opengl lea y resuma el siguiente enlace
las funciones de traslación aplicados en las imágenes provocan la multiplicación de la matriz actual de la imagen por una matriz de traslación creada con los argumentos que se le pasan, por lo que las continuas llamadas a la función display() provocan la creación de constantes multiplicaciones de la matriz actual con el efecto que se observa de incrementar la traslación.

Por ello para solucionar el problema OpenGL llega a dispoder de las pilas de matrices las cuales permiten el almacenamiento y la recuperación de las matrices anteriormente usadas o manejadas. Antes que nada una pila es un almacén con funcionamiento FIFO, el último en entrar es el primero en salir, por lo que suele comparar a una pila de platos en la que sólo se puede dejar uno encima de la pila o coger el superior que es el último depositado.

La pila de matrices tiene el mismo funcionamiento sustituyendo los platos por matrices. La matriz superior de la pila es sobre la que se aplican las distintas transformaciones, multiplicándola por la matriz que generan las disntintas funciones.

En el código que a continuación se muestra, se encuentra declarando dos funciones de matrices las cuales se tratan de glPushMatrix() y glPopMatrix().
La función glPushMatrix() lo que hace es una copia de la matriz superior y la pone encima de la pila, de tal forma que las dos matrices superiores son iguales. Al llamar a la función glPushMatrix() se duplica la matriz superior. Las siguientes transformaciones que se realizan se aplican sólo a la matriz superior de la pila, quedando la anterior con los valores que tenía en el momento de llamar a la función glPushMatrix().
La función glPopMatrix() provoca la eliminación de la matriz superior, dejando asi en la parte superior de la pila la matriz que estaba en el momento de llamar a la función GlPushMatrix().
void display(void) {
...
// glPushMatrix();
...
glTranslatef(0.0, 0.0, .5);
...
// glPopMatrix();
glutSwapBuffers();
}

Al ejecutar de nuevo la aplicación, primeramente tiene el mismo aspecto que sin comentar las llamadas, pero si obligamos a que se llame varias veces a la función display(). La razón de este movimiento es que en la función display está incluida una llamada a glTranslatef() que se utiliza para posicionar uno de los objetos.


No hay comentarios:

Publicar un comentario