lunes, 24 de septiembre de 2012

Resumen


OPERACIONES CON MATRICES: DIBUJANDO EL CAMINO

La transformación de las coordenadas se realiza internamente en OpenGL a partir de las

matrices de transformación y de las coordenadas de modelado del objeto. Sin embargo, para representar el rastro que dibuja la tortuga al desplazarse, se realizará explícitamente la transformación de la coordenada en la que se encuentra la tortuga. De esta forma se actúa directamente en la matriz de transformación.

LA PILA DE MATRICES

En la función display() se encuentran las llamadas a dos funciones de matrices que

todavía no han sido comentadas. Se trata de glPushMatrix() y glPopMatrix(). Para

comprender su funcionamiento, primero se va a experimentar que es lo que ocurre cuando no

están dichas llamadas. Para ello se comentan en la función display() ambas llamadas:

void display(void) {

...

// glPushMatrix();

...

glTranslatef(0.0, 0.0, .5);

...

// glPopMatrix();

glutSwapBuffers();

}

Para solucionar este problema OpenGL dispone de unos stacks o pilas de matrices, que

permiten almacenar y recuperar una matriz anterior. Aunque OpenGL dispone de pilas para las matrices GL_MODELVIEW y GL_PROJECTION, sólo se suele utilizar la pila de GL_MODELVIEW.

La función glPopMatrix() elimina la matriz superior, quedando en la parte superior de

la pila la matriz que estaba en el momento de llamar a la función glPushMatrix().

 

DIBUJANDO UN RASTRO

Una característica de Logo es que la tortuga al avanzar va dibujando el camino por el
que ha pasado. Hasta ahora la aplicación va transformando las coordenadas del objeto para situarlo en la nueva posición según las instrucciones introducidas pero no muestra la ruta seguida.
Para mostrar la ruta es necesario almacenar los puntos por los que pasa la tortuga. El
rastro consistirá en una línea que una estos puntos.

Necesitaremos realizar tres operaciones: calcular la coordendas donde se encuentra la
tortuga, almacenar dicha coordenada y dibujar el rastro.
Para almacenar los puntos se utiliza una variable para indicar el número de puntos y tres
vectores para las coordenadas x, y, z.

int np = 0;

float px [10000];

float py [10000];

float pz [10000];

Para calcular las coordenadas de la tortuga es necesario conocer la matriz de
transformación de modelado.
Para operar con la matriz mModel, se cargará en la pila de matrices de
GL_MODELVIEW despues de realizar un PushMatrix(), de modo que no altere la matriz
actual. En la función main() se inicializa esta matriz con el código:

glMatrixMode(GL_MODELVIEW);

glPushMatrix();

glLoadIdentity();

glGetDoublev (GL_MODELVIEW_MATRIX, mModel);

glPopMatrix();

En este código se realizan las siguientes operaciones: . se indica primeramente sobre que matriz se van a realizar las opereraciones con.
glMatrixMode(); . se crea una nueva matriz con glPushMatrix(); . se carga la matriz identidad con glLoadIdentity(); . se almacena la matriz superior de la pila en el vector mModel con la fucnión.
glGetDoublev(); . y finalmente se elimina la matriz superior de la pila con glPopMatrix() para dejar la que estaba antes de este proceso.

 

No hay comentarios:

Publicar un comentario