Professional Documents
Culture Documents
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
A A B
centro de proyeccin
La proyeccin de una lnea sigue siendo una lnea extremos y llamar a Bresenham!
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
no geomtrica
no planar
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)
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
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
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?
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
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
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
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
u = VPN v
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
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
1 0 A= c /c x z 0
0 1 c y / cz 0
0 0 0 0 1 0 0 1
M = T ( o x ,o y ,o z ) R A
Ejemplo
continuacin
Informacin de partida:
Lo primero es obtener la expresin de los vectores (u,v,w) del sistema del ojo:
w=
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=
continuacin
a) Calcular la matriz de transformacin de vista:
continuacin
b) Obtener las coordenadas de los puntos en el nuevo sistema:
continuacin
c) Calcular la matriz de proyeccin perspectiva:
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
C = (4,5,8)
C cy=8
cx=5 u
continuacin
La recta que se quiere afilar es:
x = 5z / 4 y = 2z
v
c z= 4
C cy=8
cx=5 u
0 1 1 0 A= 5/ 4 2 0 0
0 0 0 0 1 0 0 1
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
0 1 0 0 0 1 1/ 4 0 0 0 0 0
A=(-8,10,16)
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
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
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)
P2 =(x2,y2,z2)
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
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
N i v(t ) = N i (P (t ) F ) = ... = 0
t=
N i (P0 F ) N i (P P0 ) 1
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
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)
OJO: en este ejemplo las normales se han tomado hacia dentro Ahora entrantes y salientes tienen signo contrario
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
Ejemplo
continuacin
continuacin
continuacin
continuacin
Resumen de lo visto