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