Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Tema 3: Transformaciones Geom´
etricas
J. Ribelles
SIE020: S´ıntesis de Imagen y Animaci´on Institute of New Imaging Technologies, Universitat Jaume I
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Contenido
1 Introducci´on 2 Transformaciones b´asicas Traslaci´on Escalado Rotaci´on 3 Concatenaci´on de Transformaciones4 Matriz de Transformaci´on de la Normal
5 Giro alrededor de un Eje arbitrario
Introducci´on
Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Introducci´
on
¿Por qu´e las necesitamos?
En la etapa de modelado los objetos se definen bajo un sistema de coordenadas propio.
A la hora de crear una escena, estos objetos se incorporan bajo un nuevo sistema de coordenadas conocido como sistema de
coordenadas del mundo.
Este cambio de sistema de coordenadas es necesario y se realiza
Introducci´on
Transformaciones b´asicas
Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL Traslaci´on Escalado Rotaci´on
Transformaciones b´
asicas
Traslaci´onConsiste en desplazar el punto p= (px,py,pz) mediante un vector
t = (tx,ty,tz) de manera que el nuevo puntoq= (qx,qy,qz):
qx =px+tx, qy =py+ty, qz =pz+tz (1)
La representaci´on matricial con coordenadas homog´eneas:
T(t) =T(tx,ty,tz) = 0 0 0 tx 0 0 0 ty 0 0 0 tz 0 0 0 1 (2)
Utilizando esta representaci´on, el nuevo punto se obtiene as´ı:
˜
Introducci´on
Transformaciones b´asicas
Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Traslaci´on
Escalado
Rotaci´on
Escalado
Consiste en multiplicar el puntop= (px,py,pz) con los factores de
escalasx,sy ysz de tal manera que el nuevo puntoq= (qx,qy,qz):
qx =px·sx, qy =py ·sy, qz =pz·sz (4)
La representaci´on matricial con coordenadas homog´eneas:
S(s) =S(sx,sy,sz) = sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1 (5)
Utilizando esta representaci´on, el nuevo punto se obtiene as´ı:
˜
Introducci´on
Transformaciones b´asicas
Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Traslaci´on Escalado
Rotaci´on
Rotaci´on
Gira un punto un ´anguloφalrededor de un eje.
La representaci´on matricial con coordenadas homog´eneas:
Rx(φ) = 0 B @ 1 0 0 0 0 cosφ −sinφ 0 0 sinφ cosφ 0 0 0 0 1 1 C A (7) Ry(φ) = 0 B @ cosφ 0 sinφ 0 0 1 0 0 −sinφ 0 cosφ 0 0 0 0 1 1 C A (8) Rz(φ) = 0 B @ cosφ −sinφ 0 0 sinφ cosφ 0 0 0 0 1 0 0 0 0 1 1 C A (9)
Utilizando esta representaci´on, el nuevo punto se obtiene as´ı:
˜
Introducci´on
Transformaciones b´asicas
Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Traslaci´on Escalado
Rotaci´on
Ejercicio
Determina las transformaciones que situan al cono que se muestra en la
figura (a) (radio de la base y altura uno) en la posici´on que se muestra
en la figura (b) (radio de la base uno y altura tres).
Introducci´on Transformaciones b´asicas
Concatenaci´on de Transformaciones
Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Concatenaci´
on de Transformaciones
Descripci´on
Las transformaciones geom´etricas en su forma matricial con
coordenadas homog´eneas se pueden concatenar.
Una sola matriz puede representar a toda una secuencia de matrices
de transformaci´on.
Es muy importante operar la secuencia de transformaciones en el orden correcto ya que el producto de matrices no posee la propiedad conmutativa.
Dibuja en el papel como quedar´ıa una esfera de radio unidad centrada en el origen dadas las dos siguientes matrices de
transformaci´onT(5,0,0) yS(5,5,5) si las matrices se multiplican de las dos formas posibles, es decir,M=T·S yM=S·T.
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones
Matriz de Transformaci´on de la Normal
Giro alrededor de un Eje arbitrario Transformaciones en OpenGL
Matriz de Transformaci´
on de la Normal
Descripci´on
La matriz de transformaci´on no siempre es v´alida para los vectores
normales a la superficie.
Lo habitual es que la matriz de transformaci´on de la normalN sea la
traspuesta de la inversa de la matriz de transformaci´on.
Sin embargo, la matriz inversa no siempre existe por lo que se recomienda que la matrizNsea la traspuesta de la matriz adjunta. Como la normal es un vector y la traslaci´on no le afecta, y el escalado y la rotaci´on son transformaciones afines, solo hay que calcular la adjunta de los 3x3 componentes superior izquierda.
Las longitudes de las normales no se preservan si hay una
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal
Giro alrededor de un Eje arbitrario
Transformaciones en OpenGL
Giro alrededor de un Eje arbitrario
Descripci´on
Seand yφel vector unitario del eje de giro y el ´angulo de giro.
Hay que calcular una base ortogonal que contenga a d.
La idea es hacer un cambio de base entre la base que forman los ejes de coordenadas y la nueva base.
X Y Z d e f Y Z d e f R
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal
Giro alrededor de un Eje arbitrario
Transformaciones en OpenGL C´alculo de la matriz R
La matriz que representa al cambio de base es esta:
R= dx dy dz ex ey ez fx fy fz (11)
e es un vector unitario normal ad.
f es el producto vectorial de los otros dos vectoresf =d×e
El vector ese puede obtener de la siguiente manera:
Partiendo del vectord haz cero su componente de menor magnitud. Intercambia los otros dos componentes y niega uno de ellos. Normal´ızalo.
Teniendo en cuenta queR es ortogonal, la matriz de rotaci´on final:
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario
Transformaciones en OpenGL
Transformaciones en OpenGL
La librer´ıa GLM
Proporciona funciones tanto para la construcci´on de las matrices de
transformaci´on como para operar con ellas:
mat4 translate (floattx, floatty, floattz) mat4 scale (floatsx, float sy, float sz) mat4 rotate (floatα, floatx, float y, floatz)
// P a r a o b t e n e r l a m a t r i z de t r a n s f o r m a c i o n d e l m o d e l o mat4 T , S , M; T = t r a n s l a t e ( 1 0 . 0 f , 0 . 0 f , 0 . 0 f ) ; S = s c a l e ( 2 . 0 f , 2 . 0 f , 2 . 0 f ) ; M = T∗S ; // P a r a o b t e n e r l a m a t r i z n o r m a l N mat3N (mat3( t r a n s p o s e ( i n v e r s e (M) ) ) ) ;
Introducci´on Transformaciones b´asicas Concatenaci´on de Transformaciones Matriz de Transformaci´on de la Normal Giro alrededor de un Eje arbitrario
Transformaciones en OpenGL
¿D´onde calcular las matrices?
La construcci´on de ambas matrices, la matriz de transformaci´on del
modelo y la matriz de transformaci´on de la normal, es conveniente que
tenga lugar en la aplicaci´on y que ambas se suministren al procesador de
v´ertices.
Listado 1: Shader para transformar la posici´on y la normal de cada v´ertice
u n i f o r m mat4M; // m a t r i z de t r a n s f o r m a c i o n d e l m o d e l o u n i f o r m mat3N ; // m a t r i z de t r a n s f o r m a c i o n de l a n o r m a l i n v e c 3 p o s i c i o n , v N o r m a l ; o u t v e c 3 n o r m a l ; v o i d main ( ) { n o r m a l = n o r m a l i z e (N∗v N o r m a l ) ; g l P o s i t i o n = M∗v e c 4( p o s i c i o n , 1 . 0 ) ; }