Вы находитесь на странице: 1из 23

Computacin Grfica I

Coordenadas Homogneas y
Transformaciones
Daniel Faria 06-39509
Laura Libretti 06-39796

Transformaciones

Las transformaciones se usan para:


o
o
o
o
o

Posicionar objetos en escena


Cambiar la forma de los objetos
Crear copias de objetos
Definir la proyeccin de la cmara virtual
Animaciones

Coordenadas Homogneas
Este sistema es necesario para poder integrar la traslacin con la
rotacion y escala.
El uso de las coordenadas homogneas permite tratar todas las
transformaciones geomtricas como multiplicacin de
matrices.
Se introduce una cuarta coordenada.
x a b c d x
w=1


y = e
z i

w m

f
j
n


g h y

k l z

o p w

p = M p

x a

y = e
z i

1 0

b
f
j
0

d x

g h y

k l z

0 1 1

Translacin 2D
Reposiciona un objeto desplazndolo a nuevas coordenadas.

x = x + t x

y'= y + t y
En forma matricial:

P = (x, y)

P = ( x , y )

T = (t x ,t y )

P = P + T
En una transformacin rgida el objeto no se deforma.
Transladar lnea :
Transladamos sus extremos.

Transladar polgonos:
Transladamos vstices y redibujamos.

Translacin Homognea

x 1

y = 0
z 0

0

0 0 tx x

1 0 ty y

0 1 tz z

0 0 1 1

Rotacin con respecto al origen


La posicin del punto es rotada alrededor del origen de
coordenadas.

x = R cos

y = R sin
x = R cos( + ) = ... = x cos y sin

y = R sin( + ) = ... = x sin + y cos


En forma matricial: P = (x, y)

P = ( x , y )
P = P R

cos sin
R =

sin

cos

Rotacin General
Frmula general cuando el punto sobre el cual se rota no es el
origen, sino un punto cualquiera ( Xc , Yc ).
x = x c + (x x c ) cos (y y c ) sin

y = y c + (x x c ) sin + (y y c ) cos

Matrices homogneas bsicas de rotacin:


cos sin 0 0

sin

cos

0
0

T(z, ) =
0

0
cos

T(y, ) =
sin

0
0
1
0
0

1 0

0 1
sin 0

0
0
cos 0

0
1

1
0
0

0 cos sin

T(x, ) =
0 sin cos

0
0
0

0
0

Rotacin General
Sobre cualquier eje dado por el vector
unitario ( kx , ky , kz ).
Con:

c = cos y

s = sin

x k x kx (1 c) + c k z kx (1 c) k z s kx k z (1 c) + ky s

y = k y k x (1 c) + k z s kz k x (1 c) + c ky k z (1 c) kx s
z k z k x (1 c) k y s k z kx (1 c) + k x s k z k z (1 c) + c

0
0
0
1

0 x

0 y

0 z

1 1

Escalado con respecto al origen


La posicin del punto se multiplica por una constante.

x = Sx x

y = Sy y
En forma matricial:

S
P = (x, y) P = ( x , y ) S = x
0
Escalado uniforme: Sx == Sy
Escalado diferencial: Sx != Sy

Sy

P = P S

Escalado General
Si el origen de coordenadas no se encuentra en el interior del
objeto, se produce un desplazamiento.
Se usa un punto fijo y se escala a partir de l.

x = x c + Sx (x x c )

y = y c + Sy (y y c )
Matriz homognea de escalado uniforme desde el origen:

x Sx

y = 0
z 0

1 0

Sy
0

0
Sz

0 x

0 y

0 z

1 1

Composicin de Transformaciones
Para cualquier secuencia de transformaciones, podemos calcular
la matriz de transformacion compuesta, calculando el producto
de las transformaciones individuales.
Translaciones sucesivas:

P = P T1 (t x1,t y1 )
P = P T2 (t x 2,t y 2 )
P = P T2 = P T1T2 = P T
1 0 0 1


T = 0 1 0 0
t
t
t
1
x1 y1 x 2

0
1
t y2

0 1

0 = 0
1 t x1 + t x 2

0
1
t y1 + t y 2

0
1

Composicin de Transformaciones
Rotaciones sucesivas:
P = P R( )
P = P R( )
P = P R( ) = P R( )R( ) = P R

cos sin 0 cos sin 0 cos( + ) sin( + ) 0



R = sin cos 0 sin cos 0 = sin( + ) cos( + ) 0

0
0
1
0
0
1
0
0
1

Composicin de Transformaciones
Escalados sucesivos:

P = P S1 (sx1,sy1 )
P = P S2 (sx 2 ,sy 2 )
P = P S2 = P S1S2 = P S

Sx1 0 0 Sx 2


S = 0 Sy1 0 0


0 1 0
0

0
Sx 2
0

0 Sx1 Sx 2

0 = 0

1 0

0
Sy1 Sy 2
0

Composicin de Transformaciones
En general
Es posible combinar transformaciones, multiplicando las matrices
correspondientes.
El producto matricial NO es conmutativo:
Ej: rotar y despus transladar transladar y despus rotar
1
0
0
px
Rotacin > Translacin:

0
cos

sin

p
y
T((x, ), p) =
0 sin cos pz
Translacin > Rotacin:
1
0
0

0 cos sin

T( p(x, )) =
0 sin cos

0
0
0

px

py cos pz sin
py sin + pz cos

Rotacin alrededor de un punto


Para hacer una rotacin general, podemos hacerlo mediante una
composicin de transformaciones bsicas.

P = P T(x c ,y c ) R( ) T(x c , y c )

Escalado alrededor de un punto


Para hacer una escalado general, podemos de igual manera.

P = P T(x c ,y c ) S(sx ,sy ) T(x c , y c )

Reflexin
Sobre el eje x

Sobre el eje y
1 0 0

0
1
0

0 0 1

Sobre el origen de coordenadas


1 0 0

0
1
0

0 0 1

1 0 0

0
1
0

0 0 1

Sobre la recta y=x


0 1 0

1
0
0

0 0 1

Reflexin General
Sobre una recta y=mx+b

P = P T(0,b) R(arctanm) F R(arctanm) T(0,b)

Matrices de Transformacin (OpenGL)


Inicializacin:
glMatrixMode(GL_MODELVIEW);
Para activar la matriz de transformacin

glLoadIdentity( );
Para cargar la identidad y as poder hacer todas las transformaciones

Transformaciones:
glScalef(GLfloat sx, GLfloat sy, GLfloat sz);
Escalar segn los factores sx, sy y sz

glTranslatef(GLfloat tx, GLfloat ty, GLfloat tz);


Transladar segn los factores tx, ty y tz

glRotatef(GLfloat angulo, GLfloat vx, GLfloat vy, Glfloat vz);


Rotar angulo segn el eje que define el vector (vx, vy, vz)

Matrices de Transformacin (OpenGL)


Ejemplo:
Display( ){

glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
glTranslatef(0.0, 0.0, -5.0);
glRotatef(45.0, 0.0, 0.0);
glScalef(2.0, 2.0, 2.0);
DrawCube( );

Matrices de Transformacin (OpenGL)


OpenGL permite guardar el estado de la matriz para luego volver a
utilizarlo de la siguiente manera:
glPushMatrix( );
Salva el estado actual de la matriz

glPopMatrix( );
Recupera el estado de la matriz

Matrices de Transformacin (OpenGL)


transform robot
glPushMatrix( );
Ejemplo:
transform head
Robot simple con
draw head
Cuerpo y brazos.
glPopMatrix( );
glPushMatrix( );
transformbody
glPushMatrix( );
transform left-arm
draw left-arm
glPopMatrix( );
glPushMatrix( );
transform right-arm
draw right-arm
glPopMatrix( );
draw body
glPopMatrix( );

cabeza,

Bibliografa
Para la realizacin de esta presentacin se utilizaron las siguientes
fuentes:
Prof. Eduardo Fernndez de la Facultad de Ing. de la
Universidad de la Repblica, Montevideo, Uruguay.
Clases del Departamento de Arquitectura y Tecnologa de
Computadores, Universidad de Sevilla, Espaa.
Prof. Alexandra La Cruz de la Universidad Simn Bolvar.
OpenGL Programming Guide.