Está en la página 1de 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

y
x

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

(2,0,0)

(2,0,0)
(2,0,0)

(2,0,0)

(2,0,0)

(2,0,0)

Y
(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

a1
( x' , y ' ) = ( x, y )
b1

x' = ax + by

Por eso pasamos a matrices 3x3, utilizando coordenadas homogneas

a1

( x' , y ' ,1) = ( x, y,1) b1


c
1

a2

b2

a2
b2
c2

a3

b3
c3

x' = ax + by + c

Por tanto, en 3-D, aplicando la misma regla, habr que pasar a matrices 4x4

a1

b
( x' , y ' , z ' ,1) = ( x, y, z ,1) 1
c
1
d
1

a2
b2
c2
d2

a3
b3
c3
d3

a4

b4
c4

d 4

x' = ax + by + cz + d

Traslacin

Reposiciona un objeto desplazndolo a las


nuevas coordenadas

P = (x, y, z)
P = (x, y, z)

x' = x + t x

y' = y + t y
z' = z + t
z

Y
X

En forma matricial:

P = ( x, y , z )
P' = ( x' , y ' , z ' )

0
T =
0

t
x

0
1

0
0

0
ty

1
tz

0
0

T ( t x , t y , t z )

La transformacin inversa sera

Para trasladar objetos, trasladamos slo sus vrtices y


redibujamos

P' = P T

Escalado con respecto al origen

La posicin del punto se multiplica por una constante

Hay que especificar tres factores de escala

x' = s x x

y' = s y y
z' = s z
z

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

En forma matricial:

P = ( x, y , z )
P' = ( x' , y ' , z ' )

sx

0
S =
0

0
sy
0

0
0
sz

0
0

P' = P S

1 1 1
S , ,
s s s
x y z

La transformacin inversa sera

Para trasladar objetos, trasladamos slo sus vrtices y redibujamos

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

Y
X

x' = x cos y sin

y ' = x sin + y cos

z' = z

P = (x, y, z)

En forma matricial:

cos

sin
RZ =
0

sin
cos
0
0

0 0

0 0
1 0

0 1

P = (x, y, z)

P ' = P RZ

X
Z

Rotacin Plana alrededor del eje X

Para calcular la expresin de rotacin alrededor del eje X, intercambiamos las variables

x' = x cos y sin

y ' = x sin + y cos

z' = z

x' = x

y ' = y cos z sin


z ' = y sin + z cos

Alrededor del eje Z

P = (x, y, z)
Z
P = (x, y, z)

Y
X

Alrededor del eje X

En forma matricial:

0
1

0 cos
RX =
0 sin

0
0

0
sin
cos
0

P' = P RX

0
0

Rotacin Plana alrededor del eje Y

Para calcular la expresin de rotacin alrededor del eje Y, intercambiamos las variables

x' = x cos + z sin

y' = y

z ' = x sin + z cos

x' = x cos y sin

y ' = x sin + y cos

z' = z

Alrededor del eje Z

P = (x, y, z)
X
P = (x, y, z)

Z
Y

Alrededor del eje Y

En forma matricial:

cos

0
RY =
sin

0 sin
1
0
0 cos
0

P ' = P RY

0
0

Afilamiento (shearing)

Consiste en llevar todos los puntos de una recta que pasa


por el origen sobre uno de los ejes principales

y = bz

Ejemplo: afilar la lnea y = bz sobre el eje z

y ' = y bz

z' = z
Z

x = az

Del mismo modo se transforma la lnea x = az en el eje z


X

x' = x az

z' = z

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' = x az

y ' = y bz
z' = z

0
1

1
0
A=
a b

0
0

0 0

0 0
1 0

0 1

y = bz

x = az

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:

La transformacin entonces queda:

Y la matriz:

0
1

1
0
A=
4/3 5/3

0
0

0 0

0 0
1 0

0 1

x' = x 4 z / 3

y' = y 5z / 3

z' = z

x = 8t

y = 10t
z = 6t

El punto afilado queda:

P ' = P A = (0,0,3)

x = 4z / 3

y = 5z / 3

Deformaciones

Son transformaciones no lineales, donde la magnitud de la transformacin depende de


cada punto

Hasta ahora, las transformaciones han sido del tipo:

Donde:

a1

b
M = 1
c
1
d
1

a2

a3

b2
c2

b3
c3

d2

d3

P' = P M

a4

b4
c4

d 4
x' = FX ( x, y, z ) = a1 x + b1 y + c1 z + d1

y ' = FY ( x, y, z ) = a2 x + b2 y + c2 z + d 2
z ' = F ( x, y , z ) = a x + b y + c z + d
Z
3
3
3
3

Esto permite expresiones del tipo:

Estas expresiones son lineales, es decir, combinacin lineal de x, y, z

Cuandos las funciones FX, FY, y FZ 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

x' = s x x

y' = s y y
z' = z

donde

sx = f ( z)

s y = f ( z )

Ejemplo: f(z) = 2z

Z
Y

Z
Y

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

x' = x cos y sin

y ' = x sin + y cos

z' = z

donde

= f (z )

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 t0, y luego en el fotograma t1

Luego el ordenador interpola entre ambos para los fotogramas intermedios

t0

traslacin

escalado

t1

t2

La interpolacin puede ser lineal o configurable por el usuario

100%

100%
80%

50%

0%

0%

t0

t1

t0

t1

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

Para mover el prisma hay que trasladarlo en x


cinco unidades a la izquierda

D ( z ) = T ( 5,0,0 ) Twist (...) T (5,0,0)

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

10

continuacin

La matriz del twist ser:

c s 0 0

s
c
0
0


Twist z =

10 0 0 1 0
0 0 0 1

Y la matriz final de la trasnformacin ser:

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

donde

c = cos( z / 10)

s = sin( z / 10)

s
c

c
s

D( z ) = T ( 5,0,0 ) Twist z T (5,0,0) =
0
0
10

5c + 5 5s

sin( 2 / 5)
cos(2 / 5)

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

5 cos(2 / 5) + 5 5 sin(2 / 5)

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

0
0
1
0

0
0
1
0
0

0
0

0
0

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]

N PT = 0

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:

N '(P ') = 0 ... N Q M T P T = 0


T

( )

Q = MT

Y de aqu deducimos que:

Aunque en la prctica es mejor hacer

Q = M 1

Ejemplo

cos

sin
M = RZ ( ) =
0

Q= M

1 T

cos

sin
=
0

sin
cos
0
0
sin
cos
0
0

0 0

0 0
1 0

0 1
0 0

0 0
1 0

0 1

N ' = N Q = ( 2c + 3s, 2 s 3c, 0, 6 )


P ' = (2c + 3s ) x + (2 s 3c) y + 6 = 0

2
y

3
x

Para el caso alfa = PI:

P' = 2 x + 3 y + 6 = 0

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:
P3

Y
P2

P1

P3
P1

X
Z

P2

Solucin: dividiendo el problema en subproblemas ms sencillos, y combinando todas las


transformaciones

continuacin
1) Trasladamos P1 al origen
P3

Y
P2

P3

P1

P2

P1
Z

0
T ( x1 , y1 , z1 ) =
0

x
1

1
0
y1

0
1
z1

0
0

P1 ' = (0,0,0,1)

P2 ' = ( x'2 , y '2 , z '2 ,1)


P ' = ( x' , y ' , z ' ,1)
3
3
3
3

continuacin
2) Rotamos sobre el eje Y, hasta llevar el segmento P1P2 sobre el plano YZ

P2

P1
Z

P2
X

P1

d1
Z

d1 =

z '2 / d1

RY ( ) =
x'2 / d1

(x'2 )2 + (z '2 )2
0 x'2 / d1 0

1
0
0
0 z '2 / d1 0

0
0
1

P1 ' ' = (0,0,0,1)

P2 ' ' = (0, y '2 , d1 ,1)


P ' ' = ( x ' ' , y ' ' , z ' ' ,1)
3
3
3
3

continuacin
3) Rotamos sobre el eje X, hasta llevar el segmento P1P2 sobre el eje Z

P2

d2

P1

P1

d2 =

( y2 ' ')2 + (z2 ' ')2

0
1

0 z2 ' ' / d 2
RX ( ) =
0 y2 ' ' / d 2

0
0

0
y2 ' ' / d 2
z2 ' ' / d 2
0

0
0

P2

P1 ' ' ' = (0,0,0,1)

P2 ' ' ' = (0,0, d 2 ,1)

P ' ' ' = ( x ' ' ' , y ' ' ' , z ' ' ' ,1)
3
3
3
3

continuacin
4) Rotamos sobre el eje Z, hasta llevar el punto P3 al plano YZ
Y
Y

P3

P3
d3

P1

P1
Z

d3 =

y3 ' ' ' / d 3

x ' ' ' / d3


RZ ( ) = 3
0

La matriz final es:

(x3 ' ' ')2 + (z3 ' ' ')2


x3 ' ' ' / d 3
y3 ' ' ' / d 3
0
0

0 0

0 0
1 0

0 1

P2

P1 ' ' ' ' = (0,0,0,1)

P2 ' ' ' ' = (0,0, d 2 ,1)


P ' ' ' ' = (0, d , z ' ' ' ' ,1)
3
3
3

M = T ( x1 , y1 , z1 ) RY ( ) RX ( ) RZ ( )

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, P1 y P2

La ecuacin paramtrica de la recta es:

x = ( x2 x1 )t + x1 = at + x1

y = ( y2 y1 )t + y1 = bt + y1
z = ( z z )t + z = ct + z
2
1
1
1

P2

P1

donde el vector (a, b, c) indica la direccin de la recta

Para resolver el problema hacemos como anteriormente: dividirlo en subproblemas ms


sencillos

continuacin
1) Trasladamos P1 al origen

P2

P1

P2
Y

Y
P1
X

0
T ( x1 , y1 , z1 ) =
0

x
1

1
0
y1

0
1
z1

0
0

P1 ' = (0,0,0,1)

P2 ' = (a, b, c,1)

continuacin
2) Rotamos en X, hasta que la recta se coloque sobre el plano XZ

Z
P2

(0,b,c)

d1

Y
P1
X

0
0
1

0 c / d1 b / d1
RX ( ) =
0 b / d1 c / d1

0
0
0

d1 = b 2 + c 2

0
0

P1 ' = (0,0,0,1)

P2 ' = (a,0, d1 ,1)

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

P2

(a,0,d1)
P1

d1 / d 2

0
RY ( ) =
a / d2

d2

d1 = a 2 + d1

a / d2

1
0
0 d1 / d 2
0

0
0

P1 ' = (0,0,0,1)

P2 ' = (0,0, d 2 ,1)

continuacin
4) Rotamos en Z el ngulo que queramos rotar
5) Hacemos la rotacin inversa

RY ( )

6) Hacemos la rotacin inversa

RX ( )

7) Deshacemos la traslacin inicial

RZ ( )

T ( x1 , y1 , z1 )
Y
X

Finalmente, la matriz de transformacin completa para una rotacin general ser el


resultado de multiplicar las siete anteriores

M = T ( x1 , y1 , z1 ) RX ( ) RY ( ) RZ ( ) RY ( ) RX ( ) T ( x1 , y1 , z1 )

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

z
y
x

z
x

z
x

Caso 2D

Sea el punto P, de coordenadas (8,4) con respecto al


sistema XY

Qu coordenadas tendr P respecto al sistema UV?

P=(8,4)

5
X

La operacin es equivalente a aplicarle a P la misma transformacin que tendramos que


aplicarle al sistema nuevo (UV) para llevarlo al viejo (XY)

1 0 0

T (5,0) = 0 1 0
5 0 1

P' = P T (5,0) = (3,4,1)

continuacin

Y si el sistema UV estuviese rotado con respecto al


XY,
Qu coordenadas tendr P respecto al sistema UV?

Y
V

60

La solucin es la misma: utilizar la tranformacin que


lleva el sistema nuevo (UV) al viejo (XY)

cos( / 3) sin ( / 3) 0

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

0
0
1

P' = P R( / 3) (0.54,8.93,1)

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:

V
Y
P

(a,b)

M = T ( a,b) R ( )

Siempre habr que trasladar en primer lugar, para no mover el sistema nuevo de sitio en
la rotacin

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?

V=<vx,vy>
Y

U=<ux,uy>

(a,b)
X

continuacin

Supongamos que los dos sistemas tienen el mismo origen

Los ejes del sistema nuevo son:

u =< u x , u y >

v =< v x , v y >

Es fcil ver que las componentes de los vectores son:

u =< u cos , u sin >

v =< v sin , v cos >

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


sino la matriz de rotacin:

cos

R( ) = sin
0

sin
cos
0

0
1

Pero si los vectores u,v estuvieran


normalizados, la matriz podra ponerse como:

ux

R( ) = u y
0

vx
vy
0

0
1

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

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

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

La matriz de rotacin necesaria para llevar el


sistema nuevo al viejo se forma de la siguiente
manera:

V
Y
X

ux

u
R= y
u
z
0

vx

wx

vy
vz

wy
wz

0
0

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:

W
V
(a,b,c)

M = T ( a , b, c ) R

Y
X

Siempre habr que trasladar en primer lugar, para no mover el sistema nuevo de sitio en
la rotacin

0
0
1

1
0
0
M =
0
0
1

a b c

0 u x

0 u y
0 u z

1 0

vx

wx

vy
vz

wy
wz

0
0

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

Caso general: sean {LU, LV, LW} 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:

La matriz final de cambio


de sistema es entonces:

V
U

0
0
1 / Lu

1 / Lv
0
1 1 1 0

S , , =
0
1 / Lw
Lu Lv Lw 0
0
0
0

0
0

1 1 1
M = T ( a,b,c) R S , ,
Lu Lv Lw

Ejemplo

continuacin

Ejemplo

continuacin

Ejemplo

También podría gustarte