jueves, 26 de septiembre de 2013

Actividad Transformaciones


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);

glMultMatrixf(fMatrizM);

BIBLIOGRAFIA

http://dmi.uib.es/~josemaria/OpenGL/Transformaciones.html

No hay comentarios.:

Publicar un comentario