3.3 Transformaciones Tridimensionales



Muchos de nuestros objetos del universo 3D serán estáticos, como paredes, terrenos y objetos de decoración, pero otros objetos requerirán movimiento. En 3D existen tres tipos de movimientos básicos que combinados conforman todas las alternativas necesarias. Estos movimientos se denominan transformaciones, dado que consisten en transformaciones lineales de coordenadas y son los siguientes:

·          Traslación (translation): consiste en mover cada punto por una distancia constante, en una dirección específica.


·         Rotación (rotation): movimiento de un objeto siguiendo una ruta circular
 







·         Escalado (scaling): incrementa o disminuye el tamaño de un objeto, por un factor de escalar.



Transformation Matrix

Para aplicar cada uno de los tres movimientos a una malla compuesta por triángulos, sería necesario desplazar cada uno de los vértices de la misma al lugar correspondiente. Esta operación es engorrosa para objetos de mucha complejidad y se torna aún más complicado cuando se quieren acumular movimientos, por ejemplo: trasladarse, luego rotar y luego volver a trasladarse.



Es por ello que las APIs gráficas cuentan con una herramienta destinada a facilitar el movimiento de objetos denominada Transformation Matrix. Esta matriz tiene una estructura de 4x4:


 




La matriz es utilizada para representar todas las transformaciones necesarias para mover un objeto 3D en el universo. Los valores contenidos en la matriz son utilizados para mover, rotar y escalar objetos. Cada fila de la matriz representa la coordenada en el universo de cada eje. La primer fila contiene la posición del eje X, la segunda del eje Y y la tercera del eje Z. Cada elemento de la matriz representa una porción de la transformación. La matriz es inicialmente cargada con la matriz identidad.

La ventaja de almacenar los movimientos de los objetos 3D con esta matriz y no con vectores sueltos es que todos los movimientos, rotaciones y escalados a hacer a un objeto en un cuadro de animación pueden almacenarse en una sola matriz. Esto es gracias a la multiplicación de matrices.

Si queremos mover un objeto, después rotarlo y luego volverlo a mover podemos crear las matrices necesarias para cada movimiento y luego multiplicarlas todas, y así obtener una sola matriz resultante que engloba todo el movimiento completo.


De esta forma, la API gráfica solo recibe una única matriz que representa el movimiento total de un objeto 3D en un momento determinado, y se reduce el almacenamiento de memoria requerido.




No hay comentarios.:

Publicar un comentario