+ All Categories
Home > Documents > Tema 4 - Transformaciones 3D - dynadata.com 3 CINEMATICA/Tema 4... · • En el caso 2D teníamos...

Tema 4 - Transformaciones 3D - dynadata.com 3 CINEMATICA/Tema 4... · • En el caso 2D teníamos...

Date post: 21-Sep-2019
Category:
Upload: others
View: 13 times
Download: 0 times
Share this document with a friend
61
TEMA 4: Transformaciones 3D
Transcript

TEMA 4: Transformaciones 3D

Índice

1. Sistemas de Coordenadas

2. Transformaciones Básicas1. Traslación2. Escalado3. Rotación Plana4. Afilamiento5. Deformaciones

3. Composición de Transformaciones

4. Rotación General

5. Transformación de Sistemas de Coordenadas

Introducción• Nos movemos en un mundo 3D

• Se debe permitir trabajar directamente con objetos 3D

xy

z

• Sin embargo al final siempre habrá que generar una image 2D en pantalla

• Las transformaciones son las mismas que antes, añadiendo una tercera componente

– traslaciones– rotaciones– escalados

Sistemas de Coordenadas• Una escena 3D se define por los puntos,

líneas y planos que la componen

• Necesitamos un sistema para poder referenciar las coordenadas, al igual que ocurría 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 teníamos inicialmente matrices 2x2, pero eso sólo nos permitía operaciones del tipo

• Por eso pasamos a matrices 3x3, utilizando coordenadas homogéneas

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

⎟⎟⎠

⎞⎜⎜⎝

⎛⋅=

21

21),()','(bbaa

yxyx byaxx +='

⎟⎟⎟

⎜⎜⎜

⎛⋅=

321

321

321

)1,,()1,','(cccbbbaaa

yxyx cbyaxx ++='

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⋅=

4321

4321

4321

4321

)1,,,()1,',','(

ddddccccbbbbaaaa

zyxzyx dczbyaxx +++='

),,( zyxP =

)',','(' zyxP = ⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1010000100001

zyx ttt

TTPP ⋅='

⎪⎩

⎪⎨

+=+=+=

z

y

x

tzztyytxx

'''

Traslación

• La transformación inversa sería

• Para trasladar objetos, trasladamos sólo sus vértices y redibujamos

• En forma matricial:

• Reposiciona un objeto desplazándolo a las nuevas coordenadas

X

Y

Z

P = (x, y, z)

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

),,( zyx tttT −−−

),,( zyxP =

)',','(' zyxP = ⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000000000000

z

y

x

ss

s

SSPP ⋅='

⎪⎩

⎪⎨

===

zszysyxsx

z

y

x

'''

Escalado con respecto al origen

• La transformación inversa sería

• Para trasladar objetos, trasladamos sólo sus vértices y redibujamos

• En forma matricial:

• La posición 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’)

⎟⎟⎠

⎞⎜⎜⎝

zyx sssS 1,1,1

Rotación Plana alrededor del eje Z• El eje de rotación 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 rotación

• La expresión para la rotación en el eje Z es X

Y

Z

⎪⎩

⎪⎨

=+=−=

zzyxyyxx

'cossin'sincos'

θθθθ

RP = (x, y, z)

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

Z

X

Y

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

=

1000010000cossin00sincos

θθθθ

ZR ZRPP ⋅='

• En forma matricial:

Rotación Plana alrededor del eje X• Para calcular la expresión de rotación alrededor del eje X, intercambiamos las variables

P = (x, y, z)

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

X

Y

Z

⎪⎩

⎪⎨

+=−=

=

θθθθ

cossin'sincos'

'

zyzzyy

xx

⎪⎩

⎪⎨

=+=−=

zzyxyyxx

'cossin'sincos'

θθθθ

Alrededor del eje Z Alrededor del eje X

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=

10000cossin00sincos00001

θθθθ

XR

XRPP ⋅='

• En forma matricial:

Rotación Plana alrededor del eje Y• Para calcular la expresión de rotación alrededor del eje Y, intercambiamos las variables

P = (x, y, z)

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

Y

Z

X

⎪⎩

⎪⎨

+−==+=

θθ

θθ

cossin''

sincos'

zxzyy

zxx

⎪⎩

⎪⎨

=+=−=

zzyxyyxx

'cossin'sincos'

θθθθ

Alrededor del eje Z Alrededor del eje Y

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛ −

=

10000cos0sin00100sin0cos

θθ

θθ

YR

YRPP ⋅='

• 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 línea y = bz sobre el eje z

• Del mismo modo se transforma la línea x = az en el eje z

⎩⎨⎧

=−=zzbzyy

''

Y

Z y = bz

⎩⎨⎧

=−=zzazxx

''

X

Z x = az

Afilamiento 3-D• Combinando ambos afilamientos 2D

obtenemos el 3D se toma una línea arbitraria que pasa por el origen, y se mueve al eje z, dejando los valores de z fijos

X

Y

Zy = bz

x = az

⎪⎩

⎪⎨

=−=−=

zzbzyyazxx

'''

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−=

10000100100001

baA

Ejemploa) 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 expresión de la recta:

⎪⎩

⎪⎨

===

tztytx

6108

⎩⎨⎧

==

3/53/4

zyzx

• La transformación entonces queda:

⎪⎩

⎪⎨

=−=−=

zzzyyzxx

'3/5'3/4'

• Y la matriz:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−=

1000013/53/400100001

A• El punto afilado queda:

)3,0,0(' =⋅= APP

Deformaciones• Son transformaciones no lineales, donde la magnitud de la transformación depende de

cada punto

• Hasta ahora, las transformaciones han sido del tipo:

• Donde:

⎪⎩

⎪⎨

+++==+++==+++==

3333

2222

1111

),,('),,('),,('

dzcybxazyxFzdzcybxazyxFydzcybxazyxFx

Z

Y

X

MPP ⋅='

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

4321

4321

4321

4321

ddddccccbbbbaaaa

M

• Esto permite expresiones del tipo:

• Estas expresiones son lineales, es decir, combinación lineal de x, y, z

• Cuandos las funciones FX, FY, y FZ no sean lineales DEFORMACIÓN

Tapering• Consiste en escalar dos de las tres coordenadas del punto, utilizando un factor de

escala que depende de la tercera coordenada

⎪⎩

⎪⎨

===

zzysyxsx

y

x

'''

donde⎩⎨⎧

==

)()(

zfszfs

y

x

• Ejemplo: f(z) = 2z

Y

Z

X

Y

Z

X

Tapering

• La función f(z) puede ser lineal (sencilla), o puede ser todo lo complicado que se quiera

• Ejemplo: f(z) = sin z

NOTAS:

• La mayoría de las veces es obligatorio mallar el objeto

• El mallado puede ser selectivo: mallar con más detalle donde haya más curvatura

• Hay que tener en cuenta que para el ordenador, el objeto no es más que un conjunto de vértices 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

⎪⎩

⎪⎨

=+=−=

zzyxyyxx

'cossin'sincos'

θθθθ

donde )(zf=θ

• NOTAS:

• Si no se malla, el resultado no sale poligonal

• Si el eje de deformación no coincide con eje z (sino que está desplazado) habrá que trasladar primero y deshacer la traslación después

Animación 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

t0y

t1

y

t2

y

traslaciónescalado

• La interpolación puede ser lineal o configurable por el usuario

tt0 t1

0%

100%

tt0 t1

0%

100%

50%

80%

Animación 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 vértices

• El sistema calcula la expresión de la deformación resultante, y le aplica la misma transformación al objeto interior

• Se usa mucho en software de modelado, para modelar objetos imperfectos a partir de una forma básica ideal

Ejemplo de twist

…continuación…• 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)( TTTzD wist ⋅⋅−=

• Ahora calculemos el ángulo del twist

• Cómo no nos dicen como es la deformación en los puntos intermedios, asumimos una interpolación lineal

– En z=0, rotamos 0 grados– En z=2, rotamos 36 grados– En z=4, rotamos 72 grados

z10πα =

• Para mover el prisma hay que trasladarlo en x cinco unidades a la izquierda

…continuación• La matriz del twist será:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

=⎟⎠⎞

⎜⎝⎛−

100001000000

10cssc

zTwistπ

• Y la matriz final de la trasnformación será:

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

+−

−=⋅⎟

⎠⎞

⎜⎝⎛−⋅−=

1055501000000

)0,0,5(10

0,0,5)(

sc

cssc

TzTTzD wistπ

donde⎩⎨⎧

⋅−=⋅−=

)10/sin()10/cos(

zszc

ππ

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

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

+−

⋅=⋅=

10)5/2sin(55)5/2cos(5010000)5/2cos()5/2sin(00)5/2sin()5/2cos(

1,4,3,5)4('

ππ

ππππ

DAA

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

Composición de Transformaciones• El escalado, la traslación y la rotación 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 TRANSFORMACIÓN AFÍN a una combinación de transformaciones lineales aplicadas a un objeto

• Cada transformación 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 creación de las tarjetas gráficas (aceleradoras)

• Las transformaciones afines preservan el paralelismo de las líneas, pero no sus ángulos y longitudes

Rotación de 45º Escalado en x

Transformación de planos• Hasta ahora hemos visto que las transformaciones se aplican solamente a los puntos

• Para transformar líneas transformaremos sólo sus dos extremos, y pintaremos la línea en el nuevo sitio

• Para trasnformar polígonos transformaremos sólo sus vértices

• Para transformar un plano del que sólo conocemos su ecuación, habrá que transformar los coeficientes de la ecuación!

• 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 ecuación del plano en forma matricial puede ponerse como

donde P = [x, y, z, 1]

0=⋅ TPN

Transformación de planos• Sea M la transformación afín aplicada al plano

• Para transformar puntos sueltos del plano haríamos P’ = P M

• Pero para obtener la ecuación 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 ecuación del plano transformado:

• Y de aquí deducimos que:

• Aunque en la práctica es mejor hacer

( ) 0...0'' =⋅⋅⋅⇒⇒=⋅ TTT PMQNPN

( ) 1−= TMQ

( )TMQ 1−=

Ejemplo

x

y

2

3

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

==

1000010000cossin00sincos

)(αααα

αZRM

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

== −

1000010000cossin00sincos

1 αααα

TMQ

( )6,0,32,32' csscQNN −−+−=⋅=

06)32()32(' =+−−++−= ycsxscP

• Para el caso alfa = PI:

0632' =++= yxP

Cálculo automático de una transformación afín• A veces es necesario llevar un objeto de una posición y orientación a otra.

• Por ejemplo, si tu aplicación tuviese una opción de centrar el objeto en algún sitio concreto.

• ¿Cómo calculamos la matriz de transformación que me hace eso?

• Ejemplo:

Z

X

Y

P1

P2

P3

Z

X

Y

P1

P2

P3

• Solución: dividiendo el problema en subproblemas más sencillos, y combinando todas las transformaciones

… continuación …1) Trasladamos P1 al origen

Z

X

Y

P1

P2

P3

Z

X

Y

P1

P2

P3

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

=−−−

1010000100001

),,(

111

111

zyx

zyxT⎪⎩

⎪⎨

==

=

)1,',','(')1,',','('

)1,0,0,0('

3333

2222

1

zyxPzyxP

P

… continuación …2) Rotamos sobre el eje Y, hasta llevar el segmento P1P2 sobre el plano YZ

Z

X

Y

P1

P2

θZ

X

Y

P1

P2

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=−

10000/'0/'00100/'0/'

)(1212

1212

dzdx

dxdz

RY θ⎪⎩

⎪⎨

===

)1,'','',''('')1,,',0(''

)1,0,0,0(''

3333

122

1

zyxPdyP

P

d1

( ) ( )222

21 '' zxd +=

… continuación3) Rotamos sobre el eje X, hasta llevar el segmento P1P2 sobre el eje Z

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=

10000/''/''00/''/''00001

)(2222

2222

dzdydydz

RX φ⎪⎩

⎪⎨

===

)1,''',''','''(''')1,,0,0('''

)1,0,0,0('''

3333

22

1

zyxPdP

P

( ) ( )222

22 '''' zyd +=

Z

X

Y

P1

P2

φ

Z

X

Y

P1

P2

d2

… continuación4) Rotamos sobre el eje Z, hasta llevar el punto P3 al plano YZ

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

=

1000010000/'''/'''00/'''/'''

)( 3333

3333

dydxdxdy

RZ α⎪⎩

⎪⎨

===

)1,'''',,0('''')1,,0,0(''''

)1,0,0,0(''''

333

22

1

zdPdP

P

( ) ( )232

33 '''''' zxd +=Z

X

Y

P1

P3

d3α

Z

X

Y

P1

P2

P3

La matriz final es: )()()(),,( 111 αφθ ZXY RRRzyxTM ⋅⋅−⋅−−−=

Ejemplo

… continuación …

…continuación…

… continuación …

…continuación…

…continuación…

Rotación General• Las rotaciones planas tenían como eje uno de los ejes principales

• Ahora usaremos como eje de rotación una recta cualquiera, que ni siquiera debe pasar por el origen de coordenadas

• La recta vendrá dada por dos puntos, P1 y P2

• La ecuación paramétrica de la recta es:

donde el vector (a, b, c) indica la dirección de la recta

• Para resolver el problema hacemos como anteriormente: dividirlo en subproblemas más sencillos

X

Y

Z

P1

P2

⎪⎩

⎪⎨

+=+−=+=+−=+=+−=

1112

1112

1112

)()()(

zctztzzzybtytyyyxatxtxxx

… continuación …1) Trasladamos P1 al origen

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

=−−−

1010000100001

),,(

111

111

zyx

zyxT⎩⎨⎧

==

)1,,,(')1,0,0,0('

2

1

cbaPP

X

Y

Z

P1

P2

X

Y

Z

P1

P2

…continuación…2) Rotamos en X, hasta que la recta se coloque sobre el plano XZ

⎩⎨⎧

==

)1,,0,(')1,0,0,0('

12

1

daPP

X

Y

Z

P1

P2

Y

Z

(0,b,c)

221 cbd +=

d1

φ

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=

10000//00//00001

)(11

11

dcdbdbdc

RX φ

…continuación…3) Rotamos en Y, hasta que la recta se coloque sobre el eje Z

⎩⎨⎧

==

)1,,0,0(')1,0,0,0('

22

1

dPP

X

Y

Z

P1

P2

X

Z

(a,0,d1)

21

21 dad +=

α

d2

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=−

10000/0/00100/0/

)(212

221

ddda

dadd

RY α

… continuación4) Rotamos en Z el ángulo que queríamos rotar

5) Hacemos la rotación inversa

6) Hacemos la rotación inversa

7) Deshacemos la traslación inicial

Finalmente, la matriz de transformación completa para una rotación general será el resultado de multiplicar las siete anteriores

X

Y

Z

)( φ−XR

)(αYR

)(θZR θ

),,( 111 zyxT

),,()()()()()(),,( 111111 zyxTRRRRRzyxTM XYZYX ⋅−⋅⋅⋅−⋅⋅−−−= φαθαφ

Ejemplo

… continuación…

… continuación …

… continuación

Ejemplo

Transformación de Sistemas de Coordenadas• Hasta ahora hemos visto cómo transformar un conjunto de puntos de un objeto en otro,

mientras el sistema permanece fijo

• A veces querremos expresar los puntos del objeto en función 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

xy

z

x yz

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 operación es equivalente a aplicarle a P la misma transformación que tendríamos que aplicarle al sistema nuevo (UV) para llevarlo al viejo (XY)

X

Y

U

VP=(8,4)

5

⎟⎟⎟

⎜⎜⎜

−=−

105010001

)0,5(T )1,4,3()0,5(' =−⋅= TPP

… continuación• Y si el sistema UV estuviese rotado con respecto al

XY,

• ¿Qué coordenadas tendrá P respecto al sistema UV?60º

X

Y

U

VP

• La solución es la misma: utilizar la tranformación que lleva el sistema nuevo (UV) al viejo (XY)

( ) ( )( ) ( )

⎟⎟⎟

⎜⎜⎜

⎛−=

10003/cos3/sin03/sin3/cos

)3/( ππππ

πR )1,93.8,54.0()3/(' ≈⋅= πRPP

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

)(),( αRbaTM ⋅−−=

• Siempre habrá que trasladar en primer lugar, para no mover el sistema nuevo de sitio en la rotación

(a,b)

• Pero existe un problema no siempre es tan fácil calcular el ángulo de rotación entre ambos sistemas (en 2D puede pero en 3D es muy difícil!)

• Lo más normal es que el sistema nuevo (UV) venga dado por la posición de su origen, y por las componentes de sus direcciones, es decir, los vectores u,v

• ¿Cómo podemos calcular la rotación de forma más sencilla?

X

Y U=<ux,uy>

V=<vx,vy>

(a,b)

… continuación• Supongamos que los dos sistemas tienen el mismo origen

• Los ejes del sistema nuevo son:

X

Y

U

V

α⎩⎨⎧

>=<>=<

yx

yx

vvvuuu

,,

⎩⎨⎧

>=<>−=<

αααα

cos,sinsin,cos

vvvuuu

• Es fácil ver que las componentes de los vectores son:α

• En realidad, lo importante no es calcular el ángulo a rotar, sino la matriz de rotación:

⎟⎟⎟

⎜⎜⎜

⎛−=

1000cossin0sincos

)( αααα

αR

• Pero si los vectores u,v estuvieran normalizados, la matriz podría ponerse como: ⎟

⎟⎟

⎜⎜⎜

⎛=

10000

)( yy

xx

vuvu

R α

Caso 3D• En 3D puede aplicarse la misma técnica para obtener la

matriz de rotación!

• De no ser así, para llevar el sistema nuevo (UV) al viejo (XY) habría que hacer 3 rotaciones diferentes

• Dado un sistema UVW definido por los vectores unitarios

⎪⎩

⎪⎨

>=<

>=<>=<

zyx

zyx

zyx

wwww

vvvvuuuu

,,

,,,,

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000000

zzz

yyy

xxx

wvuwvuwvu

R

X

Y

Z

• La matriz de rotación 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:

RcbaTM ⋅−−−= ),,(

• Siempre habrá que trasladar en primer lugar, para no mover el sistema nuevo de sitio en la rotación

X

Y

Z

(a,b,c)

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

=

1000000

1010000100001

zzz

yyy

xxx

wvuwvuwvu

cba

M

… continuación• 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 centímetros

• Para llevar el nuevo al viejo habrá que escalar por 100X

Y

U

V

• 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: ⎟⎟

⎟⎟⎟

⎜⎜⎜⎜⎜

=⎟⎟⎠

⎞⎜⎜⎝

10000/10000/10000/1

1,1,1

w

v

u

wvu LL

L

LLLS

• La matriz final de cambio de sistema es entonces: ⎟⎟

⎞⎜⎜⎝

⎛⋅⋅−−−=

wvu LLLSRcbaTM 1,1,1),,(

Ejemplo

… continuación

Ejemplo

… continuación

Ejemplo


Recommended