Está en la página 1de 46

TEMA 5: Vistas en 3D

ndice
1. Proyecciones
1. 2. Proyeccin Paralela Proyeccin Perspectiva

2.

Transformacin de Vista
1. 2. 3. 4. Introduccin Parametros de vista Obtencin de los vectores del nuevo sistema Construccin de la matriz de vista

3.

Algoritmos de recorte
1. 2. Algoritmo de Cohen Sutherland Algoritmo de Cyrus - Beck

Proyecciones
La proyeccin es una transformacin que convierte la representacin tridimensional de una escena sobre un plano bidimensional la pantalla Debemos proyectar toda nuestra escena 3D sobre un plano, para convertirlo en un dibujo 2D Finalmente este dibujo plano se traslada a la pantalla

Teora de las proyecciones


La proyeccin de un punto viene definida por la interseccin entre el plano de proyeccin y el rayo que une dicho punto con el centro de proyeccin A A B B
centro de proyeccin en el infinito

A A B

centro de proyeccin

La proyeccin de una lnea sigue siendo una lnea extremos y llamar a Bresenham!

slo se necesita proyectar sus

Tipos de proyecciones
La proyeccin ms usada es la proyeccin geomtrica planar
Se llama geomtrica cuando los rayos de proyeccin son rectos Se llama planar cuando la superficie de proyeccin es un plano

Existen otros tipos de proyeccin

no geomtrica

no planar

La proyeccin geomtrica plana es de dos tipos


Perspectiva: la distancia del centro de proyeccin al plano es finita Paralela: la distancia es infinita slo se especifica la direccin de vista todos los rayos son paralelos

Proyeccin paralela
El caso ms sencillo es la proyeccin paralela ortogrfica
El plano de proyeccin es uno de los planos principales (ejemplo plano XY) La direccin de proyeccin es el eje perpendicular (ejemplo eje Z)

Solamente hay que eliminar la componente Z

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

Se pierde informacin sobre la profundidad Las lneas paralelas permanecen paralelas Los ngulos slo se mantienen en las caras paralelas al plano de proyeccin

Proyeccin paralela
Es inmediata de calcular Se utiliza en programas de modelado, donde se muestran tres vistas simultneas del objeto

Proyeccin perspectiva
Simula el comportamiento de una cmara o del ojo humano Aumenta el realismo de la imagen, al dar sensacin de profundidad El tamao de un objeto vara invers. proporcional a la distancia del objeto al plano de proyeccin

No es til para reconocer formar ni medir longitudes:


Las distancias son falsas Los ngulos no se mantienen Las lneas paralelas dejan de serlo

Clculo de las expresiones


Generalmente se usa un sistema de mano izquierda, donde
El eje Z representa la direccin de vista El eje Y representa la vertical del observador El eje X representa la horizontal del observador

Q=(x,y)

Q=(x,y,z)

Z X D

Sea Q=(x,y,z) un punto 3D que se proyecta sobre el punto Q=(x,y) Queremos calcular las coordenadas de Q a partir de Q La distancia D al plano de proyeccin se supone conocida

Clculo de las expresiones


Y Q=(u,v) X D Z Se resuelve por la regla de los tringulos semejantes: Q=(x,y,z) D Q=(u,v) Q=(x,y,z) Z

v y = D z

v=D

y z

u x = D z

u=D

x z

Los objetos ms alejados (z>>) tiene componentes ms pequeas La expresin es vlida tambin para puntos detrs del plano y del ojo Qu ocurre si variamos D?

Obtencin de la matriz de perspectiva


La expresin final para la perspectiva es: Cmo pasarlo a forma matricial? Inicialmente parece imposible, pues no es una expresin lineal

x' = Dx / z y ' = Dy / z z' = D

La solucin pasa por usar la componente homognea:

x ' = Dx / z y ' = Dy / z z' = D h' = 1

x ' = Dx y ' = Dy z ' = Dz h' = z

x' = x y' = y z' = z h' = z / D

De esta forma la matriz queda:

1 0 P= 0 0

0 0 0 1 0 0 0 1 1/ D 0 0 0

Y la transformacin queda:

Q' = Q P

Obtencin del resultado


Despus de aplicar la matriz el resultado queda:

Q ' = Q P = ( x, y, z ,1) P = ( x, y, z , z / D )
Para obtener las coordenadas 2D del punto proyectado, dividimos x e y por la componente homognea y Q=(8,6,10)

v
Q= (4, 3)

u
D=5 x Es aconsejable seguir utilizando coordenadas homogneas:
Cdigo ms sencillo y eficaz Permiten recuperar el punto original a partir del proyectado

Ejemplo

El plano de proyeccin es correcto (paralelo al plano XY) Pero la posicin del observador no hay que trasladar para que est en el origen

continuacin
Trasladamos el ojo al origen:

0 1 1 0 T (a,b, d ) = 0 0 a b
Hacemos la perspectiva:

0 0 0 0 1 0 d 1

M = TPT 1 =

1 0 a / d 0

0 1 b/d 0

0 0 0 1/ d 0 1 0 0

1 0 P= 0 0

0 0 1 0

0 0 0 1 1/ d 0 0 0 0 1 0 0 0 0 0 1

El punto proyectado estar en:

P ' = PM = (4a,2b,0,2) = (2a, b,0)


d a 3a d

Deshacemos la traslacin:

1 0 T (a, b, d ) = 0 a

0 1 b d

Transformacin de vista
En un caso general, el ojo puede estar en cualquier posicin, mirando en cualquier direccin La transformacin de vista consiste en cambiar el sistema de coordenadas global de toda la escena a otro sistema centrado en el ojo

v u

w z
El paso final ser realizar la proyeccin perspectiva en el nuevo sistema para obtener la foto final

x y

Parmetros de vista
El plano de proyeccin suele venir definido por un punto del plano (VRP) y un vector normal (VPN) VUP v VPN

Tambin hace falta un vector que indique la verticalidad del observador (VUP)

VRP u w

La posicin del ojo tambin ha de ser conocida (COP) El punto COP ser el origen del sistema de referencia 3D para hacer la perspectiva

COP u

Parmetros de vista
Normalmente el observador no puede ver la escena completa Hay que definir una ventana rectangular en el interior del plano de proyeccin para delimitar la foto La ventana y el ojo forman una pirmide volumen de vista La lnea entre el ojo y el centro de la ventana (C) indica la direccin de vista

C v La pirmide de vista suele truncarse por dos planos de recorte El objetivo es evitar objetos muy lejanos o excesivamente cercanos

Obtencin de los vectores del nuevo sistema


Lo primero es obtener los 3 vectores del sistema de referencia del ojo (u,v,w)

El vector w siempre coincide con el vector normal al plano, VPN

w = VPN
El vector v suele ser VUP, excepto cuando VUP no pertenece al plano de proyeccin En ese caso hay que proyectarlo

v VUP

VPN

v = VUP (VPN VUP )VPN

El vector u es perpendicular a los dos anteriores, apuntando a la derecha del observador:

u = VPN v

Construccin de la matriz de vista


A continuacin hay que hacer un cambio de sistema de referencia para pasar del sistema de coordenadas global al sistema del ojo Para ello se usa la frmula para el cambio de sistema de referencia:
Trasladar el sistema nuevo al viejo Rotar la cmara para hacer coincidir los sistemas

u z w x y

M = T ( o x ,o y ,o z ) R
La matriz final queda:

1 0 M = 0 o x

0 1 0 oy

0 0 1 oz

0 u x 0 u y 0 u z 1 0

vx vy vz 0

wx wy wz 0

0 0 0 1

Los vectores (u,v,w) deben estar normalizados!

Afilamiento adicional
Cuando la direccin de vista no coincida con el eje Z, habr que realizar un afilamiento para que coincidan La recta que se quiere afilar es: v
c z= D

C cy

x = (c x / c z )z y = (c y / c z )z
x' = x (c x / c z )z y ' = y (c y / c z )z z' = z

cx La expresin para el afilamiento es: La matriz es: u

1 0 A= c /c x z 0

0 1 c y / cz 0

0 0 0 0 1 0 0 1

La matriz final M de transformacin de vista es:

M = T ( o x ,o y ,o z ) R A

Ejemplo

continuacin
Informacin de partida:

COP = (0,5,5) VUP =< 0,1,1 >

VPN =< 0,1,1 >

Lo primero es obtener la expresin de los vectores (u,v,w) del sistema del ojo:

w=

VPN 1 1 =< 0, , > VPN 2 2 VUP 1 1 =< 0, , > VUP 2 2

Como el vector VUP pertenece al plano de proyeccin, no hace falta proyectarlo para calcular v: El vector u es el producto vectorial de los dos anteriores:

v=

u = w v =< 1,0,0 >

continuacin
a) Calcular la matriz de transformacin de vista:

No hace falta afilamiento porque no se ha especificado ninguna ventana

continuacin
b) Obtener las coordenadas de los puntos en el nuevo sistema:

continuacin
c) Calcular la matriz de proyeccin perspectiva:

d) Obtener y dibujar los puntos proyectados:

continuacin

P1

P4

P2

P3

Ejemplo

continuacin
El ojo ya est en el origen no hay que trasladar La matriz de transformacin de vista es entonces:

0 1 M = R= 0 0

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

El centro de la ventana es el punto

C = (4,5,8)

Despus de transformado sale el punto

C ' = C M = (5,8,4) (0,0,4)


v
c z= 4

C cy=8

Es necesario afilar la recta que pasa por el centro de la ventana al eje Z

cx=5 u

continuacin
La recta que se quiere afilar es:

x = 5z / 4 y = 2z

v
c z= 4

C cy=8

La matriz de afilamiento es:

cx=5 u

0 1 1 0 A= 5/ 4 2 0 0

0 0 0 0 1 0 0 1

La matriz final de transformacin de vista es:

5 / 4 1 M = R A = 0 0

2 1 0 0 0 0 1 0 0 0 0 1

continuacin
b) Obtener la matriz de perspectiva, y calcular la proyeccin del segmento

1 La matriz de perspectiva es: 0 P= 0 0


Los puntos proyectados son:

0 1 0 0 0 1 1/ 4 0 0 0 0 0

A' = (8,10,16,1) M P = (0,0,8,2) = (0,0,4,1) B' = (6,9,15,1) M P = (3 / 2,3,6,3 / 2) = (1,2,4,1)


v El punto A debe caer en el mismo centro de la foto w C=(-4,5,8)

A=(-8,10,16)

Etapas en la creacin de la imagen


Posicionar objetos en el sistema 3D

x' z'

y'

Transformacin de vista

z x y

Recorte 3D

Proyeccin

Transformacin a ventana

Recorte 3D
Antes de proyectar la imagen debemos recortar la escena frente al volumen de visualizacin

Bsicamente se trata de un problema de interseccin de rectas y planos Las rectas son las aristas de los polgonos Los planos son las 6 caras del volumen de visualizacin

Algoritmo de Cohen-Sutherland 3D
Igual que en el caso 2D, se ejecuta primero un test inicial para reducir el nmero de intersecciones a calcular A cada extremo de la lnea le asignamos un cdigo de 6 bits Cada bit indica si el punto est a un lado o a otro de cada cara 000100 Cuando se usa proyeccin paralela, el volumen de vista es un cubo En ese caso, los bits del cdigo se calculan con simples restas como en la versin 2D (y-ymax)

000000

Clculo de los cdigos en perspectiva


Cuando se usa proyeccin perspectiva, el volumen de vista es una pirmide truncada (frustum) y 000100 Q 000000 El clculo de los cdigos es ligeramente diferente z

Por ejemplo, tomemos la cara superior, donde conocemos las coordenadas del punto Q La ecuacin del techo es La funcin es entonces

y = (Q y / Qz )z = az

> 0 fT = y az = 0

El punto est por encima del volumen El punto est dentro del volumen

Necesitamos una funcin de decisin para cada cara

Clculo de la interseccin
En total, para calcular ambos cdigos slo hacen falta 12 restas, 12 productos y 12 comparaciones Finalmente una operacin binaria AND entre ambos cdigos nos etiquetara la lnea como invisible, completamente visible, o caso de duda A las lneas en caso de duda, se les calcula la interseccin con una de las caras Suele elegirse una cara en donde el bit sea distinto en ambos cdigos La interseccin se puede calcular en parmetricas de esta manera:
ax +

P1=(x1,y1,z1)

ax1 + by1 + cz1 + d t= a( x2 x1 ) + b( y2 y1 ) + c( z 2 z1 )

P2 =(x2,y2,z2)

Finalmente la lnea se subdivide en dos, y se vuelve a aplicar el test a cada tramo

by +

cz

d=

Ejemplo
Recortar la arista AB, siendo:
Q = (0,2,5), A = (0,5,6) B = (0,1,8)

y A Q B z

Calculamos las funciones de decisin para cada cara Ejemplo: cara superior

f T = y 2z / 5

Obtenemos los cdigos para A y B: 100000 y 000000 Calculamos la interseccin con la cara superior

(5 4t ) 2 / 5(6 + 2t ) = 0
Obtenemos las subaristas AP y PB:
La primera sale completamente invisible La segunda sale completamente visible

t = 13 / 24

P = (0,17 / 6,85 / 12)

Algoritmo de Cyrus-Beck 3D
Similar al caso en 2D Se elige un punto F arbitrario para cada cara Sea P(t) un punto sobre el segmento, t en [0,1]

P(t ) = P0 + t (P P0 ) 1
v(t ) = P (t ) F

Sea v(t) el vector desde F hasta un punto cualquiera del segmento Sea el producto escalar

N i v(t ) N i v(t ) = 0
N v(t) P1

La interseccin se produce cuando

Desarrollando y despejando t obtenemos:

N i v(t ) = N i (P (t ) F ) = ... = 0

t=

N i (P0 F ) N i (P P0 ) 1

P0 Hay que controlar que el denominador no se haga cero

Clculo del tramo visible


Aplicando la frmula obtenemos los 6 valores de t que indican las intersecciones de la lnea con las 6 caras. Cmo identificamos cules son las dos correctas? Los valores de t fuera del rango (0,1) se descartan Cada valor de t se etiqueta como entrante (tE) o saliente (tS), segn entre o salga con respecto al volumen Cmo saberlo? Mirando el signo de N i (P P0 ) 1
Si es negativo Si es positivo punto entrante punto saliente

P0 tE

La solucin viene dada por el tramo de lnea entre el PE ms alto y el PS ms bajo Si tE > tS la lnea no se dibuja

tE

Una vez obtenidos los valores de t, se sustituyen en la ecuacin parmetrica para obtener las coordenadas (x,y,z) de los puntos

tS P1

Ejemplo de recorte con volumen rectangular


Sea P0 = (-2, -1, 1/2), P1 = (3/2, 3/2, -1/2) P1 (1,1,1)
LEFTT OP

Primero calculamos las normales Como puntos conocidos tomamos las esquinas La direccin del segmento es (-1,-1,-1)

y x P0
mnimo tS mximo tE

D = (7 / 2,5 / 2,1)

La lnea recortada es el segmento entre los puntos:

OJO: en este ejemplo las normales se han tomado hacia dentro Ahora entrantes y salientes tienen signo contrario

P (2 / 7) = P0 + (2 / 7) D = (1,2 / 7,3 / 14) P (4 / 5) = P0 + (4 / 5) D = (4 / 5,1,3 / 10)

Recorte con volumen en perspectiva


Cuando el recorte es en perspectiva, el volumen de recorte es una pirmide truncada v2 v1 v3 Como punto perteneciente a las 4 caras laterales se puede tomar el ojo (0,0,0) Pero cmo podemos calcular las normales?

v4

(0,0,0)

Necesitamos conocer dos vectores pertenecientes a cada cara Entonces, el producto vectorial de cada pareja de vectores nos da la normal Ejemplo:

nT = v1 v2

(suponiendo que queremos las normales hacia fuera)

Ejemplo

continuacin

continuacin

continuacin

continuacin

Resumen de lo visto