Sei sulla pagina 1di 61

TEMA 4: Transformaciones 3D

ndice
1. 2. Sistemas de Coordenadas Transformaciones Bsicas
1. 2. 3. 4. 5. Traslacin Escalado Rotacin Plana Afilamiento Deformaciones

3. 4. 5.

Composicin de Transformaciones Rotacin General 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)

(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 ) b 1

a2 b2

x' = ax + by

Por eso pasamos a matrices 3x3, utilizando coordenadas homogneas

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

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 d4

x' = ax + by + cz + d

Traslacin
Reposiciona un objeto desplazndolo a las nuevas coordenadas Z P = (x, y, z) P = (x, y, z)

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


En forma matricial:

Y X

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

1 0 T = 0 t x

0 1 0 ty

0 0 1 tz

0 0 0 1

P' = P T

La transformacin inversa sera

T ( t x , t y , t z )

Para trasladar objetos, trasladamos slo sus vrtices y redibujamos

Escalado con respecto al origen


La posicin del punto se multiplica por una constante Hay que especificar tres factores de escala Z

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


X En forma matricial:

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

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

sx 0 S = 0 0

0 sy 0 0

0 0 sz 0

0 0 0 1

P' = P S

La transformacin inversa sera

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

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 X Z

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


En forma matricial: Y

P = (x, y, z)

cos sin RZ = 0 0

sin cos 0 0

0 0 0 0 1 0 0 1

P = (x, y, z)

P ' = P RZ
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


Alrededor del eje Z

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


Alrededor del eje X

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

En forma matricial:

Y X

0 1 0 cos RX = 0 sin 0 0

0 sin cos 0

0 0 0 1

P' = P RX

Rotacin Plana alrededor del eje Y


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

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


Alrededor del eje Z

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


Alrededor del eje Y

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

En forma matricial:

Z Y

cos 0 RY = sin 0

0 sin 1 0 0 cos 0 0

0 0 0 1

P ' = P RY

Afilamiento (shearing)
Consiste en llevar todos los puntos de una recta que pasa por el origen sobre uno de los ejes principales Z y = bz

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

y ' = y bz z' = z
Z Del mismo modo se transforma la lnea x = az en el eje z X x = az

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 Z

y = bz

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

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:

x' = x 4 z / 3 y' = y 5z / 3 z' = z

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

x = 4z / 3 y = 5z / 3

Y la matriz:

0 1 1 0 A= 4/3 5/3 0 0

0 0 0 0 1 0 0 1

El punto afilado queda:

P ' = P A = (0,0,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:

P' = P M

a1 b M = 1 c 1 d 1

a2 b2 c2 d2

a3 b3 c3 d3

a4 b4 c4 d4
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 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

y
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

donde

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


0 0 1 0 0 0 0 1 0 0 0 1

Y la matriz final de la trasnformacin ser:

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

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

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)

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

Y de aqu deducimos que:

Q = MT

( )

Aunque en la prctica es mejor hacer

Q = M 1

Ejemplo

cos sin M = RZ ( ) = 0 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
3 x

2 y

Q= M

1 T

cos sin = 0 0

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

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 P2 P1 X Z Z P3 P1 X

P2

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

continuacin
1) Trasladamos P1 al origen P3 P2 P1 X P1 Z Z

Y P3 P2 X

1 0 T ( x1 , y1 , z1 ) = 0 x 1

0 1 0 y1

0 0 1 z1

0 0 0 1

P ' = (0,0,0,1) 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

P1 Z

P2

P2 X Z P1 X

d1

d1 =

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

z '2 / d1 0 RY ( ) = x'2 / d1 0

P ' ' = (0,0,0,1) 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 y2 ' ' / d 2 z2 ' ' / d 2 0 0 0 0 1

P2

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

P ' ' ' = (0,0,0,1) 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 P3 Y P3 d3 X P1 Z P1 Z X

d3 =

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


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

P2

y3 ' ' ' / d 3 x ' ' ' / d3 RZ ( ) = 3 0 0


La matriz final es:

P ' ' ' ' = (0,0,0,1) 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:

P2

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

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

Z P2 Y P1 X

P1

1 0 T ( x1 , y1 , z1 ) = 0 x 1

0 1 0 y1

0 0 1 z1

0 0 0 1

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

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

Z P2 Y P1 X

d1

(0,b,c)

d1 = b 2 + c 2

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

0 0 0 1

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

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

Z P2 P1 X Y X (a,0,d1)

d2

d1 = a 2 + d1

d1 / d 2 0 RY ( ) = a / d2 0

a / d2

1 0 0 d1 / d 2 0 0

0 0 0 1

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

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

RZ ( )
Z

RY ( )

RX ( ) T ( x1 , y1 , z1 )
Y X

7) Deshacemos la traslacin inicial

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
x z y

z x y

Caso 2D
Sea el punto P, de coordenadas (8,4) con respecto al sistema XY Qu coordenadas tendr P respecto al sistema UV? X Y V P=(8,4)

5 U

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 P

X 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) X U

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: Y V

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 0 1

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

ux R( ) = u y 0

vx vy 0

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 Z W V Y X U

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:

ux u R= y u z 0

vx vy vz 0

wx wy wz 0

0 0 0 1

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: Z W V (a,b,c)

M = T ( a , b, c ) R
X

Y U

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 vy vz 0

wx wy wz 0

0 0 0 1

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 V U X Y

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:

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

0 0 0 1

La matriz final de cambio de sistema es entonces:

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

Ejemplo

continuacin

Ejemplo

continuacin

Ejemplo

Potrebbero piacerti anche