You are on page 1of 61

TEMA 4: Transformaciones 3D

ndice
1. Sistemas de Coordenadas
2. Transformaciones Bsicas
1. Traslacin
2. Escalado
3. Rotacin Plana
4. Afilamiento
5. Deformaciones
3. Composicin de Transformaciones
4. Rotacin General
5. Transformacin de Sistemas de Coordenadas
Introduccin
Nos movemos en un mundo 3D
Se debe permitir trabajar directamente
con objetos 3D
x
y
z
Sin embargo al final siempre habr que generar una image 2D en pantalla
Las transformaciones son las mismas que antes,
aadiendo una tercera componente
traslaciones
rotaciones
escalados
Sistemas de Coordenadas
Una escena 3D se define por los puntos,
lneas y planos que la componen
Necesitamos un sistema para poder
referenciar las coordenadas, al igual que
ocurra en 2 dimensiones
Hace falta un tercer eje, Z, perpendicular al
X y al Y
Cualquier punto se describe entonces como
una terna de valores (x, y, z)
Para el sentido del eje Z se usa la regla de la
mano derecha
X
Y
Z
(2,0,0)
(2,0,0)
(2,0,0) (2,0,0)
(2,0,0)
(2,0,0)
(2,0,0)
(2,0,0)
Transformaciones 3-D
Son extensiones de las transformaciones en dos dimensiones
En el caso 2D tenamos inicialmente matrices 2x2, pero eso slo nos permita
operaciones del tipo
Por eso pasamos a matrices 3x3, utilizando coordenadas homogneas
Por tanto, en 3-D, aplicando la misma regla, habr que pasar a matrices 4x4

=
2 1
2 1
) , ( ) ' , ' (
b b
a a
y x y x
by ax x + = '

=
3 2 1
3 2 1
3 2 1
) 1 , , ( ) 1 , ' , ' (
c c c
b b b
a a a
y x y x
c by ax x + + = '

=
4 3 2 1
4 3 2 1
4 3 2 1
4 3 2 1
) 1 , , , ( ) 1 , ' , ' , ' (
d d d d
c c c c
b b b b
a a a a
z y x z y x d cz by ax x + + + = '
) , , ( z y x P =
) ' , ' , ' ( ' z y x P =

=
1
0 1 0 0
0 0 1 0
0 0 0 1
z y x
t t t
T
T P P = '

+ =
+ =
+ =
z
y
x
t z z
t y y
t x x
'
'
'
Traslacin
La transformacin inversa sera
Para trasladar objetos, trasladamos slo sus vrtices y
redibujamos
En forma matricial:
Reposiciona un objeto desplazndolo a las
nuevas coordenadas
X
Y
Z
P = (x, y, z)
P = (x, y, z)
) , , (
z y x
t t t T
) , , ( z y x P =
) ' , ' , ' ( ' z y x P =

=
1 0 0 0
0 0 0
0 0 0
0 0 0
z
y
x
s
s
s
S
S P P = '

=
=
=
z s z
y s y
x s x
z
y
x
'
'
'
Escalado con respecto al origen
La transformacin inversa sera
Para trasladar objetos, trasladamos slo sus vrtices y redibujamos
En forma matricial:
La posicin del punto se multiplica por una constante
Hay que especificar tres factores de escala
X
Y
Z
P = (x, y, z)
P = (x, y, z)

z y x
s s s
S
1
,
1
,
1
Rotacin Plana alrededor del eje Z
El eje de rotacin es paralelo a uno de los ejes principales
El signo del ngulo viene dado por la regla de la mano
derecha
El punto al rotar permanece en el plano perpendicular al eje
de rotacin
La expresin para la rotacin en el eje Z es X
Y
Z

=
+ =
=
z z
y x y
y x x
'
cos sin '
sin cos '

R
P = (x, y, z)
P = (x, y, z)
Z
X
Y

=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin cos


Z
R
Z
R P P = '
En forma matricial:
Rotacin Plana alrededor del eje X
Para calcular la expresin de rotacin alrededor del eje X, intercambiamos las variables
P = (x, y, z)
P = (x, y, z)
X
Y
Z

+ =
=
=


cos sin '
sin cos '
'
z y z
z y y
x x

=
+ =
=
z z
y x y
y x x
'
cos sin '
sin cos '


Alrededor del eje Z Alrededor del eje X

=
1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1


X
R
X
R P P = '
En forma matricial:
Rotacin Plana alrededor del eje Y
Para calcular la expresin de rotacin alrededor del eje Y, intercambiamos las variables
P = (x, y, z)
P = (x, y, z)
Y
Z
X

+ =
=
+ =


cos sin '
'
sin cos '
z x z
y y
z x x

=
+ =
=
z z
y x y
y x x
'
cos sin '
sin cos '


Alrededor del eje Z Alrededor del eje Y


=
1 0 0 0
0 cos 0 sin
0 0 1 0
0 sin 0 cos


Y
R
Y
R P P = '
En forma matricial:
Afilamiento (shearing)
Consiste en llevar todos los puntos de una recta que pasa
por el origen sobre uno de los ejes principales
Ejemplo: afilar la lnea y = bz sobre el eje z
Del mismo modo se transforma la lnea x = az en el eje z

=
=
z z
bz y y
'
'
Y
Z y = bz

=
=
z z
az x x
'
'
X
Z x = az
Afilamiento 3-D
Combinando ambos afilamientos 2D
obtenemos el 3D se toma una lnea
arbitraria que pasa por el origen, y
se mueve al eje z, dejando los
valores de z fijos
X
Y
Z
y = bz
x = az

=
=
=
z z
bz y y
az x x
'
'
'


=
1 0 0 0
0 1
0 0 1 0
0 0 0 1
b a
A
Ejemplo
a) Afilar la recta que pasa por los puntos (0,0,0) y (8,10,6)
b) Obtener las nuevas coordenadas del punto P = (4,5,3)
Primero calculamos la expresin de la recta:

=
=
=
t z
t y
t x
6
10
8

=
=
3 / 5
3 / 4
z y
z x
La transformacin entonces queda:

=
=
=
z z
z y y
z x x
'
3 / 5 '
3 / 4 '
Y la matriz:


=
1 0 0 0
0 1 3 / 5 3 / 4
0 0 1 0
0 0 0 1
A
El punto afilado queda:
) 3 , 0 , 0 ( ' = = A P P
Deformaciones
Son transformaciones no lineales, donde la magnitud de la transformacin depende de
cada punto
Hasta ahora, las transformaciones han sido del tipo:
Donde:

+ + + = =
+ + + = =
+ + + = =
3 3 3 3
2 2 2 2
1 1 1 1
) , , ( '
) , , ( '
) , , ( '
d z c y b x a z y x F z
d z c y b x a z y x F y
d z c y b x a z y x F x
Z
Y
X
M P P = '

=
4 3 2 1
4 3 2 1
4 3 2 1
4 3 2 1
d d d d
c c c c
b b b b
a a a a
M
Esto permite expresiones del tipo:
Estas expresiones son lineales, es decir, combinacin lineal de x, y, z
Cuandos las funciones F
X
, F
Y
, y F
Z
no sean lineales DEFORMACIN
Tapering
Consiste en escalar dos de las tres coordenadas del punto, utilizando un factor de
escala que depende de la tercera coordenada

=
=
=
z z
y s y
x s x
y
x
'
'
'
donde

=
=
) (
) (
z f s
z f s
y
x
Ejemplo: f(z) = 2z
Y
Z
X
Y
Z
X
Tapering
La funcin f(z) puede ser lineal
(sencilla), o puede ser todo lo
complicado que se quiera
Ejemplo: f(z) = sin z
NOTAS:
La mayora de las veces es obligatorio mallar el objeto
El mallado puede ser selectivo: mallar con ms detalle donde haya ms curvatura
Hay que tener en cuenta que para el ordenador, el objeto no es ms que un conjunto
de vrtices y aristas discreto
Twisting
Consiste en escalar dos de las tres coordenadas del punto, utilizando un factor de
escala que depende de la tercera coordenada

=
+ =
=
z z
y x y
y x x
'
cos sin '
sin cos '


donde
) (z f =
NOTAS:
Si no se malla, el resultado no
sale poligonal
Si el eje de deformacin no
coincide con eje z (sino que
est desplazado) habr que
trasladar primero y deshacer la
traslacin despus
Animacin con deformaciones
Podemos deformar un objeto en el fotograma t
0
, y luego en el fotograma t
1
Luego el ordenador interpola entre ambos para los fotogramas intermedios
t
0
y
t
1
y
t
2
y
traslacin
escalado
La interpolacin puede ser lineal o configurable por el usuario
t t
0
t
1
0%
100%
t t
0
t
1
0%
100%
50%
80%
Animacin con deformaciones
Deformaciones de caja
Un tipo distinto de deformaciones
son las deformaciones de caja
Se coloca una caja mallada
alrededor del objeto, y se
deforman los vrtices
El sistema calcula la expresin de
la deformacin resultante, y le
aplica la misma transformacin al
objeto interior
Se usa mucho en software de
modelado, para modelar objetos
imperfectos a partir de una forma
bsica ideal
Ejemplo de twist
continuacin
Como el eje del twist no coincide con el eje z,
habr que llevarlo primero hasta l, hacer el
twist, y devolver el prisma a su sitio
( ) ( ) ) 0 , 0 , 5 ( ... 0 , 0 , 5 ) ( T T T z D
wist
=
Ahora calculemos el ngulo del twist
Cmo no nos dicen como es la deformacin en los
puntos intermedios, asumimos una interpolacin
lineal
En z=0, rotamos 0 grados
En z=2, rotamos 36 grados
En z=4, rotamos 72 grados
z
10

=
Para mover el prisma hay que trasladarlo en x
cinco unidades a la izquierda
continuacin
La matriz del twist ser:

1 0 0 0
0 1 0 0
0 0
0 0
10
c s
s c
z T
wist

Y la matriz final de la trasnformacin ser:


( )

=
1 0 5 5 5
0 1 0 0
0 0
0 0
) 0 , 0 , 5 (
10
0 , 0 , 5 ) (
s c
c s
s c
T z T T z D
wist

donde

=
=
) 10 / sin(
) 10 / cos(
z s
z c

Para obtener el punto A=(5,3,4) transformado:


( )

= =
1 0 ) 5 / 2 sin( 5 5 ) 5 / 2 cos( 5
0 1 0 0
0 0 ) 5 / 2 cos( ) 5 / 2 sin(
0 0 ) 5 / 2 sin( ) 5 / 2 cos(
1 , 4 , 3 , 5 ) 4 ( '



D A A
( ) 1 , 4 ), 5 / 2 cos( 3 , 5 ) 5 / 2 sin( 3 ' + = A
Composicin de Transformaciones
El escalado, la traslacin y la rotacin son transformaciones lineales, ya que los nuevos
puntos se calculan a partir de combinaciones lineales de las componentes de los puntos
originales (las deformaciones no lo son!)
Se define TRANSFORMACIN AFN a una combinacin de transformaciones lineales
aplicadas a un objeto
Cada transformacin vendr representada por una sola matriz, que se obtendr
multiplicando las matrices de cada una de las transformaciones, y en el mismo orden en
el que queremos que se apliquen
Este hecho es el que impuls la creacin de las tarjetas grficas (aceleradoras)
Las transformaciones afines preservan el paralelismo de las lneas, pero no sus ngulos
y longitudes
Rotacin de 45
Escalado en x
Transformacin de planos
Hasta ahora hemos visto que las transformaciones se aplican solamente a los puntos
Para transformar lneas transformaremos slo sus dos extremos, y pintaremos la lnea
en el nuevo sitio
Para trasnformar polgonos transformaremos slo sus vrtices
Para transformar un plano del que slo conocemos su ecuacin, habr que transformar
los coeficientes de la ecuacin!
Sea el plano Ax + By + Cz + D = 0
Llamemos N al vector N = [ A, B, C, D], donde se cumple que (A, B, C) es el vector
normal al plano (ocurre lo mismo con una recta)
La ecuacin del plano en forma matricial puede ponerse como
donde P = [x, y, z, 1]
0 =
T
P N
Transformacin de planos
Sea M la transformacin afn aplicada al plano
Para transformar puntos sueltos del plano haramos P = P M
Pero para obtener la ecuacin completa del plano transformado necesitamos hacer
N = N Q, donde Q es una matriz que tenemos que calcular
Se ve claro que M no es igual a Q
escalando
Para deducir la matriz Q partimos de la ecuacin del plano transformado:
Y de aqu deducimos que:
Aunque en la prctica es mejor hacer
( ) 0 ... 0 ' ' = =
T T
T
P M Q N P N
( )
1
=
T
M Q
( )
T
M Q
1
=
Ejemplo
x
y
2
3

= =
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin cos
) (

Z
R M
( )

= =

1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin cos
1


T
M Q
( ) 6 , 0 , 3 2 , 3 2 ' c s s c Q N N + = =
0 6 ) 3 2 ( ) 3 2 ( ' = + + + = y c s x s c P
Para el caso alfa = PI:
0 6 3 2 ' = + + = y x P
Clculo automtico de una transformacin afn
A veces es necesario llevar un objeto de una posicin y orientacin a otra.
Por ejemplo, si tu aplicacin tuviese una opcin de centrar el objeto en algn sitio
concreto.
Cmo calculamos la matriz de transformacin que me hace eso?
Ejemplo:
Z
X
Y
P
1
P
2
P
3
Z
X
Y
P
1
P
2
P
3
Solucin: dividiendo el problema en subproblemas ms sencillos, y combinando todas las
transformaciones
continuacin
1) Trasladamos P
1
al origen
Z
X
Y
P
1
P
2
P
3
Z
X
Y
P
1
P
2
P
3


=
1
0 1 0 0
0 0 1 0
0 0 0 1
) , , (
1 1 1
1 1 1
z y x
z y x T

=
=
=
) 1 , ' , ' , ' ( '
) 1 , ' , ' , ' ( '
) 1 , 0 , 0 , 0 ( '
3 3 3 3
2 2 2 2
1
z y x P
z y x P
P
continuacin
2) Rotamos sobre el eje Y, hasta llevar el segmento P
1
P
2
sobre el plano YZ
Z
X
Y
P
1
P
2

Z
X
Y
P
1
P
2

=
1 0 0 0
0 / ' 0 / '
0 0 1 0
0 / ' 0 / '
) (
1 2 1 2
1 2 1 2
d z d x
d x d z
R
Y

=
=
=
) 1 , ' ' , ' ' , ' ' ( ' '
) 1 , , ' , 0 ( ' '
) 1 , 0 , 0 , 0 ( ' '
3 3 3 3
1 2 2
1
z y x P
d y P
P
d
1
( ) ( )
2
2
2
2 1
' ' z x d + =
continuacin
3) Rotamos sobre el eje X, hasta llevar el segmento P
1
P
2
sobre el eje Z

=
1 0 0 0
0 / ' ' / ' ' 0
0 / ' ' / ' ' 0
0 0 0 1
) (
2 2 2 2
2 2 2 2
d z d y
d y d z
R
X

=
=
=
) 1 , ' ' ' , ' ' ' , ' ' ' ( ' ' '
) 1 , , 0 , 0 ( ' ' '
) 1 , 0 , 0 , 0 ( ' ' '
3 3 3 3
2 2
1
z y x P
d P
P
( ) ( )
2
2
2
2 2
' ' ' ' z y d + =
Z
X
Y
P
1
P
2

Z
X
Y
P
1
P
2
d
2
continuacin
4) Rotamos sobre el eje Z, hasta llevar el punto P
3
al plano YZ

=
1 0 0 0
0 1 0 0
0 0 / ' ' ' / ' ' '
0 0 / ' ' ' / ' ' '
) (
3 3 3 3
3 3 3 3
d y d x
d x d y
R
Z

=
=
=
) 1 , ' ' ' ' , , 0 ( ' ' ' '
) 1 , , 0 , 0 ( ' ' ' '
) 1 , 0 , 0 , 0 ( ' ' ' '
3 3 3
2 2
1
z d P
d P
P
( ) ( )
2
3
2
3 3
' ' ' ' ' ' z x d + =
Z
X
Y
P
1
P
3
d
3

Z
X
Y
P
1
P
2
P
3
La matriz final es: ) ( ) ( ) ( ) , , (
1 1 1

Z X Y
R R R z y x T M =
Ejemplo
continuacin
continuacin
continuacin
continuacin
continuacin
Rotacin General
Las rotaciones planas tenan como eje uno de los ejes principales
Ahora usaremos como eje de rotacin una recta cualquiera, que ni siquiera debe pasar
por el origen de coordenadas
La recta vendr dada por dos puntos, P
1
y P
2
La ecuacin paramtrica de la recta es:
donde el vector (a, b, c) indica la direccin de la recta
Para resolver el problema hacemos como anteriormente: dividirlo en subproblemas ms
sencillos
X
Y
Z
P
1
P
2

+ = + =
+ = + =
+ = + =
1 1 1 2
1 1 1 2
1 1 1 2
) (
) (
) (
z ct z t z z z
y bt y t y y y
x at x t x x x
continuacin
1) Trasladamos P
1
al origen


=
1
0 1 0 0
0 0 1 0
0 0 0 1
) , , (
1 1 1
1 1 1
z y x
z y x T

=
=
) 1 , , , ( '
) 1 , 0 , 0 , 0 ( '
2
1
c b a P
P
X
Y
Z
P
1
P
2
X
Y
Z
P
1
P
2
continuacin
2) Rotamos en X, hasta que la recta se coloque sobre el plano XZ

=
=
) 1 , , 0 , ( '
) 1 , 0 , 0 , 0 ( '
1 2
1
d a P
P
X
Y
Z
P
1
P
2
Y
Z
(0,b,c)
2 2
1
c b d + =
d
1

=
1 0 0 0
0 / / 0
0 / / 0
0 0 0 1
) (
1 1
1 1
d c d b
d b d c
R
X

continuacin
3) Rotamos en Y, hasta que la recta se coloque sobre el eje Z

=
=
) 1 , , 0 , 0 ( '
) 1 , 0 , 0 , 0 ( '
2 2
1
d P
P
X
Y
Z
P
1
P
2
X
Z
(a,0,d
1
)
2
1
2
1
d a d + =

d
2

=
1 0 0 0
0 / 0 /
0 0 1 0
0 / 0 /
) (
2 1 2
2 2 1
d d d a
d a d d
R
Y

continuacin
4) Rotamos en Z el ngulo que queramos rotar
5) Hacemos la rotacin inversa
6) Hacemos la rotacin inversa
7) Deshacemos la traslacin inicial
Finalmente, la matriz de transformacin completa para una rotacin general ser el
resultado de multiplicar las siete anteriores
X
Y
Z
) (
X
R
) (
Y
R
) (
Z
R

) , , (
1 1 1
z y x T
) , , ( ) ( ) ( ) ( ) ( ) ( ) , , (
1 1 1 1 1 1
z y x T R R R R R z y x T M
X Y Z Y X
=
Ejemplo
continuacin
continuacin
continuacin
Ejemplo
Transformacin de Sistemas de Coordenadas
Hasta ahora hemos visto cmo transformar un conjunto de puntos de un objeto en otro,
mientras el sistema permanece fijo
A veces querremos expresar los puntos del objeto en funcin de un sistema de
coordenadas diferente
Normalmente, los objetos vienen definidos en un sistema local
Cuando se monta la escena, todos los puntos deben estar referidos a un nico sistema
global
x
y
z
x
y
z
x
y
z
Caso 2D
Sea el punto P, de coordenadas (8,4) con respecto al
sistema XY
Qu coordenadas tendr P respecto al sistema UV?
La operacin es equivalente a aplicarle a P la misma transformacin que tendramos que
aplicarle al sistema nuevo (UV) para llevarlo al viejo (XY)
X
Y
U
V
P=(8,4)
5

=
1 0 5
0 1 0
0 0 1
) 0 , 5 ( T
) 1 , 4 , 3 ( ) 0 , 5 ( ' = = T P P
continuacin
Y si el sistema UV estuviese rotado con respecto al
XY,
Qu coordenadas tendr P respecto al sistema UV?
60
X
Y
U
V
P
La solucin es la misma: utilizar la tranformacin que
lleva el sistema nuevo (UV) al viejo (XY)
( ) ( )
( ) ( )

=
1 0 0
0 3 / cos 3 / sin
0 3 / sin 3 / cos
) 3 / (

R ) 1 , 93 . 8 , 54 . 0 ( ) 3 / ( ' = R P P
Caso general 2D
Dado un sistema UV localizado en el punto (a,b), y
rotado un ngulo alfa con respecto al sistema XY, la
matriz de cambio de sistema de referencia viene dada
por:
P
X
Y
U
V
) ( ) , ( R b a T M =
Siempre habr que trasladar en primer lugar, para no mover el sistema nuevo de sitio en
la rotacin
(a,b)
Pero existe un problema no siempre es tan fcil
calcular el ngulo de rotacin entre ambos sistemas (en
2D puede pero en 3D es muy difcil!)
Lo ms normal es que el sistema nuevo (UV) venga dado
por la posicin de su origen, y por las componentes de
sus direcciones, es decir, los vectores u,v
Cmo podemos calcular la rotacin de forma ms
sencilla?
X
Y
U=<u
x
,u
y
>
V=<v
x
,v
y
>
(a,b)
continuacin
Supongamos que los dos sistemas tienen el mismo origen
Los ejes del sistema nuevo son:
X
Y
U
V

> =<
> =<
y x
y x
v v v
u u u
,
,

> =<
> =<


cos , sin
sin , cos
v v v
u u u
Es fcil ver que las componentes de los vectores son:

En realidad, lo importante no es calcular el ngulo a rotar,


sino la matriz de rotacin:

=
1 0 0
0 cos sin
0 sin cos
) (

R
Pero si los vectores u,v estuvieran
normalizados, la matriz podra ponerse como:

=
1 0 0
0
0
) (
y y
x x
v u
v u
R
Caso 3D
En 3D puede aplicarse la misma tcnica para obtener la
matriz de rotacin!
De no ser as, para llevar el sistema nuevo (UV) al viejo
(XY) habra que hacer 3 rotaciones diferentes
Dado un sistema UVW definido por los vectores unitarios

> =<
> =<
> =<
z y x
z y x
z y x
w w w w
v v v v
u u u u
, ,
, ,
, ,

=
1 0 0 0
0
0
0
z z z
y y y
x x x
w v u
w v u
w v u
R
X
Y
Z
La matriz de rotacin necesaria para llevar el
sistema nuevo al viejo se forma de la siguiente
manera:
U
V
W
U
V
W
Caso general 3D
Dado un sistema UVW localizado en el punto (a,b,c),
definido por los vectores unitarios {u,v,w}, la matriz
de cambio de sistema de referencia viene dada por:
R c b a T M = ) , , (
Siempre habr que trasladar en primer lugar, para no mover el sistema nuevo de sitio en
la rotacin
X
Y
Z
(a,b,c)


=
1 0 0 0
0
0
0
1
0 1 0 0
0 0 1 0
0 0 0 1
z z z
y y y
x x x
w v u
w v u
w v u
c b a
M
continuacin
Si los vectores {u,v,w} no fueran unitarios, puede que eso
signifique que el sistema nuevo est a una escala diferente
Ejemplo: un sistema en metros y otro en centmetros
Para llevar el nuevo al viejo habr que escalar por 100
X
Y
U
V
Caso general: sean {L
U
, L
V
, L
W
} las
longitudes de los vectores {u,v,w}
Para obtener la matriz de cambio de
sistema final habr que multiplicar por la
matriz de escalado siguiente:

1 0 0 0
0 / 1 0 0
0 0 / 1 0
0 0 0 / 1
1
,
1
,
1
w
v
u
w v u
L
L
L
L L L
S
La matriz final de cambio
de sistema es entonces:

=
w v u
L L L
S R c b a T M
1
,
1
,
1
) , , (
Ejemplo
continuacin
Ejemplo
continuacin
Ejemplo