SECUENCIA EN QUE SE APLICAN LAS
TRANSFORMACIONES
Estas transformaciones se aplican siempre sobre la matriz
activa, que seleccionamos con la instrucción glMatrixMode. El orden con que se
aplican estas transformaciones es importante, no es lo mismo aplicar una
translacion y posteriormente un rotación que el orden inverson rotacion y
translación.
El orden en que se aplican las transformaciones en OpenGL es
al contrario de lo que parece intuitivo a primera vista. Por ejemplo:
glLoadIdentity();
glTranslatef(0.5,
0.5, 1.0);
glRotatef(45.0,
1.0, 1.0, 1.0)
glBegin(GL_TRIANGLE);
glVertex3f(0.0,
0.0, 0.0);
glVertex3f(1.0,
0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
glEnd();
Primero carga la matriz identidad, luego multiplica por una
matriz de translacion y por ultimo una de rotación. El resultado es que primero
rota el triangulo y posteriormente lo traslada, esto es debido a que las multiplicaciones
las realiza por el lado derecho:
I·R·T·vertice
= (I·(R·(T·vertice)))
El vertice primero lo multiplica por la matriz T (de
translacion) luego por R y finalmente por I.
La lectura se realiza de abajo arriba, hasta encontrar una
funcion glLoadIdentity o glLoadMatrix. Las transformaciones que haya despues de
la primitiva de dibujado glBegin - glEnd no se tienen en cuenta porque la
primtiva ya ha sido renderizada.
Si deseamos realizar multiplicaciones por la izquierda de
una matriz N podemos aplicar el siguiente método:
leer la matriz actual M
cargar la identidad
multiplicar por la nueva transformacion N
multiplicar por la matriz M
En OpenGL seria:
GLFloat fMatrizM[16];
glLoadMatrixf(fMatrizM);
glLoadIdentity();
glMultMatrixf(fMatrizN), glTranslatef(x, y, z), glScalef(sx,
sy, sz) o glRotatef(ang, x, y, z);
No hay comentarios.:
Publicar un comentario