Sei sulla pagina 1di 69

Computacin Grfica

Eduardo Fernndez

Determinacin de superficies
visibles
Basado en:

Captulo 13

Del Libro: Introduccin a la Graficacin


por Computador
Foley Van Dam Feiner Hughes - Phillips

Dos mtodos fundamentales


1.- Algoritmo de precisin de imagen:
Por cada (pxel de la imagen) {
Determinar el objeto ms cercano al observador
que es atravesado por el rayo proyector a
travs del pxel;
Dibujar el pxel con el color apropiado;
}

Dos mtodos fundamentales


2.- Algoritmo de precisin de objeto:
Por cada (objeto del mundo) {
Determinar aquellas partes del objeto cuya vista
no est obstruida por otras partes del mismo
objeto o por otro objeto;
Dibujar esas partes con el color apropiado;
}

2 mtodos fundamentales

Diferencias
En precisin de objeto no se considera la resolucin de la
pantalla para los clculos => el dibujo en pantalla es el
ltimo paso.
En precisin de imagen, al ampliar una imagen hay que
rehacer todos los clculos.
Los algoritmos de precisin de objeto se hicieron
inicialmente para sistemas grficos vectoriales.
Los algoritmos de precisin de imagen se hicieron para
sistemas grficos de barrido.
Los algoritmos ms recientes combinan la precisin de
imagen y la precisin de objeto.

Tcnicas generales
para algoritmos eficientes
1. Coherencia
2. Transformacin en perspectiva
3. Extensiones y volmenes acotantes
4. Eliminacin de caras posteriores
5. Particin espacial
6. Jerarqua

Tcnicas generales para algoritmos eficientes

1.- Coherencia
Coherencia = similitud local, continuidad, etc.
Motivacin de la coherencia: ahorrar clculos.
Hay 8 tipos de coherencia identificados:
1. Coherencia de objetos
2. Coherencia de caras
3. Coherencia de aristas
4. Coherencia de aristas implicadas
5. Coherencia de lneas de barrido
6. Coherencia de reas
7. Coherencia de profundidad
8. Coherencia de cuadros

Tcnicas generales para algoritmos eficientes

1.- Coherencia
1.

Coherencia de objetos
Si un objeto A est separado de otro B, no es
necesario fijarse en la superposicin de cada
parte de A con cada parte de B

1.

Coherencia de caras
Las propiedades de las superficies varan
suavemente sobre una misma cara. Se pueden
hacer clculos incrementales.

1.

Coherencia de aristas
Una arista cambia de visibilidad slo cuando cruza
detrs de otra arista (visible) o penetra en una
cara visible.

Tcnicas generales para algoritmos eficientes

1.- Coherencia
4.

Coherencia de aristas implicadas


Si una cara penetra a otra, se genera una nueva
arista (la lnea de interseccin). Esta se puede
determinara a partir de 2 ptos de interseccin.

4.

Coherencia de lneas de barrido


Entre una lnea de barrido y otra, los tramos visibles
de los objetos difieren muy poco.

4.

Coherencia de reas
Pxeles adyacentes en general se corresponden
con una misma cara visible.

Tcnicas generales para algoritmos eficientes

1.- Coherencia
7.

Coherencia de profundidad
Partes cercanas de una misma superficie estn
muy cerca en profundidad.
Superficies distintas en el mismo lugar de la
pantalla estn a mayor separacin de
profundidad.

8.

Coherencia de cuadros
Las imgenes del mismo ambiente en dos instantes
sucesivos en el tiempo casi siempre sern
bastante similares. Los calculos realizados para
una imagen se pueden reutilizar en la siguiente.

Tcnicas generales para algoritmos eficientes

2.- Transformacin de perspectiva


P3 =(x3, y3, z3)
P2 =(x2, y2, z2)
P1 =(x1, y1, z1)
Centro de
proyeccin

Se hacen transformaciones de normalizacin, para que los rayos


proyectores sean paralelos al eje z (proyeccin paralela), o para
que los rayos proyectores emanen del origen (proyeccin en
perpectiva).

Tcnicas generales para algoritmos eficientes

2.- Transformacin de perspectiva


Proyeccin paralela: puntos estn en el mismo proyector
si x1=x2, y1=y2
x

Proyeccin de perspectiva: puntos xestn en el mismo


proyector si x1/z1=x2/z2 , y1/z1=y2/z2

x2

x1
z1

z2

Tcnicas generales para algoritmos eficientes

2.- Transformacin de perspectiva

(-1,1,-1)

z
x (a,-a,-a)

x
(1,-1,0)

-a=zmin

Volumen en perspectiva
normalizado (Cap. 6)

(-1,1,-1)

Tcnicas generales para algoritmos eficientes

2.- Transformacin de perspectiva

1
0

M=
0

0
1

0
0
1
0
1 + z min
0
1
zmin -1

0
z min

1 + z min
0

Tcnicas generales para algoritmos eficientes

2.- Transformacin de perspectiva

y
z

z
x

Tcnicas generales para algoritmos eficientes

3.- Extensiones y volmenes acotantes


Y

Tcnicas generales para algoritmos eficientes

3.- Extensiones y volmenes acotantes


y

Prueba minmax
No hay superposicin si:
( ((xmax2<xmin1) or (xmax1<xmin2)) and
((ymax2<ymin1) or (ymax1<ymin2)) )

Tcnicas generales para algoritmos eficientes

3.- Extensiones y volmenes acotantes

Tcnicas generales para algoritmos eficientes

3.- Extensiones y volmenes acotantes


Y
Caja acotante, o
volumen acotante.
Prueba minmax
La prueba incluye el
control de z
((zmax2<zmin1) or (zmax1<zmin2))

Tcnicas generales para algoritmos eficientes

3.- Extensiones y volmenes acotantes


Si hay varios posibles vol. acot., cmo se los elige?

T = bB + oO
T= Costo de los test de interseccin de un objeto.
b= Nmero de veces que el volumen acotante es testeado.
B= Costo de calcular un test de interseccin entre 2 v.a.
o= Nmero de veces que el objeto es testeado.
O= El costo de calcular una interseccin entre 2 objetos.

Tcnicas generales para algoritmos eficientes

4.- Eliminacin de caras posteriores


Perspectiva

Paralela

Tcnicas generales para algoritmos eficientes

5.- Particin Espacial

Se divide un problema grande en otros ms


pequeos.
Se asigna objetos a grupos espacialmente
coherentes.

Por ej.: se divide el plano de proyeccin en una malla


rectangular , y se determina en qu seccin est cada
objeto
La particin puede ser adaptable (si hay objetos
distribuidos de forma desigual)
Por ej.: Estructura de rboles de octantes y
cuadrantes.

Tcnicas generales para algoritmos eficientes

5.- Particin Espacial


E
D
C

Tcnicas generales para algoritmos eficientes

5.- Particin Espacial

Tcnicas generales para algoritmos eficientes

6.- Jerarqua
Edificio

Pisos 1

Aptos 1

ALGORITMOS

Algoritmo de z-buffer
x=1
Y
Lnea de barrido

ys

zi

zi+1

xi

xi

+1

=x

+1

Algoritmo de z-buffer
Clculo de profundidad de un plano.

Ax + By + Cz + D = 0

z= (- D - Ax - By)/C = (- D - By)/C x A/C

zi = (- D - Bys)/C xi A/C

zi+1 = (- D - Bys)/C (xi+1) A/C = zi A/C

Algoritmo de z-buffer
void memoria_z
int pz;
/*la z del polgono en las coord de pxel(x,y)*/
{
for (y = 0; y< YMAX; y++){
for (x = 0; x < XMAX; x++) {
Se inicializan
escribir_pxel(x,y,valor_fondo);
las matrices
escribir_Z(x,y,0);
}
}
for (cada poligono) {
for (cada pxel en la proyeccion del poligono){
pz = valor z del polig. En las coord. (x,y);
if (pz>= leer_Z(x,y)){
escribir_Z(x,y,pz);
escribir_pxel(x,y, color del polig en (x,y));
} } } }

Ojo, en el Foley dice >=!!

Algoritmo de z-buffer

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

5
5
5
5
5
5
5

5
5
5
5
5
5

5
5
5
5
5

5 5 5 5
5 5 5
5 5
5

5
0
0
5
0
5
0
5
0
5
0
5
0
5
0

5
0
0
5
0
5
0
5
0
5
0
5
0
0

5
0
0
5
0
5
0
5
0
5
0
0
0

5
0
0
5
0
5
0
5
0
0
0
0

5
0
0
5
0
5
0
0
0
0
0

5
0
0
5
0
0
0
0
0
0

5
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

Algoritmo de z-buffer

5
0
0
5
0
5
0
5
0
5
0
5
0
5
0

5
0
0
5
0
5
0
5
0
5
0
5
0
0

5
0
0
5
0
5
0
5
0
5
0
0
0

5
0
0
5
0
5
0
5
0
0
0
0

5
0
0
5
0
5
0
0
0
0
0

5
0
0
5
0
0
0
0
0
0

5
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

3
4
5
6
7
8

3
4
5
6
7

3
4 3
5 4 3
6 5 4 3

5
0
0
5
0
5
0
5
0
5
6
0
5
7
0
5
8
0

5
0
0
5
0
5
0
5
0
5
0
5
6
0
7
0

5
0
0
5
0
5
0
5
0
5
0
5
0
6
0

5
0
0
5
0
5
0
5
0
3
0
4
0
5
0

5
0
0
5
0
5
0
0
0
3
0
4
0

5
0
0
5
0
0
0
0
0
3
0

5
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0

Algoritmo de z-buffer
Y
y1
ys

Si no se ha determinado el plano pero se


tienen las coordenadas de los vrtices del
polgono
z1
za=z1-(z1-z2)(y1-ys)/(y1-y2)
za
Lnea de barrido
zp zb
z =z -(z -z )(y -y )/(y -y )
b

y2
y3

z2

zp=zb-(zb-za)(xb-xp)/(xb-xa)
z3
X

Algoritmos de lnea de barrido


Tabla de aristas (aristas horizontales son ignoradas)
1. La coordenada X del extremo con menor coordenada Y.
2. La coordenada Y del otro extremo de la arista.
3. X : incremento de X que se usa para pasar de una lnea
de rastreo a la siguiente.
4. El nmero de identificacin del polgono.
Tabla de polgonos
1. Coeficientes de la ecuacin del plano
2. Informacin del sombreado o color para el polgono
3. Bandera booleana de entrada-salida, con valor inicial
falso.
Tabla de aristas activas (AET)
Contiene las aristas que intersecan la lnea de rastreo actual.
Las aristas estn en orden creciente de x.

Algoritmos de lnea de barrido


y
E
B
+2
+1

C
F

Algoritmos de lnea de barrido


y

y=

C
A

Algoritmos de lnea de barrido


I
H
B

C
F

A
J
G

Al no haber polgonos penetrantes, no es necesario


realizar clculo de profundidad al pasar por BC

Algoritmos de lnea de barrido


S

R
M
K

Para que el algoritmo funcione bien, el polgono KLM se


debe dividir en 2.

Algoritmos de lnea de barrido


Una variante utiliza la coherencia de profundidad
Si los polgonos no se penetran, si en la AET
estn las mismas aristas y en el mismo orden,
entonces no han ocurrido cambios en las
relaciones de profundidad y por tanto no es
necesario realizar nuevos clculos de
profundidad.

Algoritmos de lnea de barrido


(previamente se debe asignar un valor al fondo)
Seudocdigo de el algoritmo (ampliado para superficies
poligonales o ms generales)
Aadir superficies a la tabla de superficies;
Asignar valores iniciales a la tabla de superficies activas;
Por cada (lnea de barrido) {
actualizar la tabla de superficies activas;

Por cada (pxel en la lnea de barrido) {


determinar las superficies que se proyectan al pxel;
encontrar la ms cercana de estas superficies;
en el pxel, determinar el matiz de la sup. ms
cercana;
}

Traza de rayos en superficies visibles

Ventana
Centro de
Proyeccin

Traza de rayos en superficies visibles


Seudocdigo para un algoritmo
Seleccionar el centro de proyeccin y una ventana en el plano de vista;
Por cada (lnea de rastreo en la imagen ) {
Por cada ( pxel en la lnea de rastreo ) {
hallar el rayo centro de proyeccin por el pxel;
Por cada ( objeto en la escena ) {
Si ( (objeto,rayo) y es el ms cercano hasta ahora)
registrar interseccin y nombre del objeto;
}
asignar color del pxel corresp. al del objeto ms cercano;
}
}

Traza de rayos en superficies visibles

Clculo de Intersecciones
Rayo que pasa por (x0,y0,z0) y (x1,y1,z1)
se determina por:

x=x0 + t(x1-x0),
Si x= x1 - x0 =>

y=y0 + t(y1-y0),

z=z0 + t(z1-z0)

x=x0 + t x

Idem con y, z =>


x=x0 + t x,

y=y0 + t y,

z=z0 + t z

Traza de rayos en superficies visibles

Clculo de Intersecciones
Esfera con centro (a,b,c) y radio r:
(x-a)2 + (y-b)2 + (z-c)2 = r2 .

Su interseccin con el rayo es:


(x0+tx-a)2 + (y0+ty-b)2 + (z0+tz-c)2 = r2
y luego de operar da la ecuacin cuadrtica:
(x2+y2+z2)t2 + 2[x(x0-a)+y(y0-b)+z(z0-c)]t +
(x0-a)2+(y0-b)2+(z0-c)2-r2 = 0

Traza de rayos en superficies visibles

Clculo de Intersecciones
Plano :
Ax + By + Cz + D = 0

Su interseccin con el rayo es:


A(x0+tx) + B(y0+ty) + C(z0+tz) + D = 0
=>

t= -(Ax0+By0+Cz0+D)/(A x+B y+C z+D)

Traza de rayos en superficies visibles

Clculo de Intersecciones
y
Conviene proyectar sobre el
plano que d la proyeccin
ms larga. Este es el
correspondiente a la variable
cuyo coeficiente en la
ecuacin del plano del
polgono tenga el mayor
valor absoluto

Rayo
P

Traza de rayos en superficies visibles

Consideraciones de eficiencia
La versin sencilla del algoritmo determina la
interseccin de cada rayo con cada polgono
=> 1024pxeles x 1024pxeles x 100objetos=
100M clculos de interseccin
Entre 75% al 95% del tiempo est dedicado al clculo
de las intersecciones.
=> es importante dar estratgias que aceleren los
clculos

Traza de rayos en superficies visibles

Consideraciones de eficiencia:

Optimiz. del clculo de las intersecciones

Hallar constantes en las ecuaciones de


interseccin objeto-rayo.

Hacer que el rayo coincida con el eje z y


aplicar la misma transformacin geomtrica
a los objetos (simplifica el clculo de la y
permite determinar el objeto ms cercano
con un ordenamiento basado en z).

Volmenes acotantes simplifican el clculo


de las intersecciones.

Traza de rayos en superficies visibles

Consideraciones de eficiencia:

Jerarqua
Pisos 1

Aptos 1

Edificio

Traza de rayos en superficies visibles

Consideraciones de eficiencia:

Particin Espacial

La escena se divide en una malla regular con volmenes


de igual tamao.

Traza de rayos en superficies visibles

Consideraciones de eficiencia:

Particin Espacial
F

E
C

G
A

Traza de rayos en superficies visibles

Consideraciones de eficiencia:

Particin Espacial

2
B

Algoritmos de prioridad de listas


Algoritmo de ordenamiento por profundidad (o
algoritmo del pintor:

Ordenar todos los polgonos de acuerdo con la menor


coordenada z de cada uno.

Resolver las ambiguedades cuando las extensiones z se


sobreponen. Dividir polgonos de ser necesario

Discretizar cada polgono en orden ascendente de la


menor coordenada z

Algoritmos de prioridad de listas


y

Algoritmo de ordenamiento por profundidad

Menor coordenada z

Algoritmos de prioridad de listas


x

y
P
Q

x
z

Algoritmos de prioridad de listas


P es el polgono a pintar. Me fijo en los polgonos Q cuyas
extensiones z se sobrepongan. Para cada Q hago 5
preguntas en orden creciente de complejidad.
Si alguna pregunta es verdadera Q =>
P no se superpone con {Q}
1.- No se sobreponen las extensiones x de los polgonos?
2.- No se sobreponen las extensiones y de los polgonos?
3.- Est todo P y el punto de observacin en semiespacios
distintos del plano de Q ?
4.- Est todo Q y el punto de observacin en el mismo
semiespacio del plano de P ?
5.- No se sobreponen las proyecciones de los polgonos en
el plano (x,y)?

Algoritmos de prioridad de listas


x
P
z

Tiene xito la prueba 3


x
P
z

Tiene xito la prueba 4

Algoritmos de prioridad de listas


En el caso en que las 5 pruebas anteriores fracasen, se realizan
dos pruebas extras, que en el caso de que alguna sea
verdadera, se debe discretizar Q antes que P.
3

Estn Q (por completo) y el punto de observacin en


distintos semiespacios del plano de P?

Estn P (por completo) y el punto de observacin en el


mismo semiespacio del plano de Q?

Si todo esto fracasa, entonces hay que dividir P o Q, eliminar el


polgono original y agregar los nuevos polgonos a la lista.

Algoritmos de prioridad de listas


x
Q
P
z

Tiene xito la prueba 3


y
Q

P
x

Ninguna prueba tiene xito

Algoritmos de prioridad de listas


y
R

S
T

Caso que genera ciclos.

Solucin: marcar al polgono que se mueva al final de la


lista. Si fracasan las 5 pruebas y el que sera Q ya est
marcado, entonces no se hacen las 3 y 4, sino que se
divide P o Q.

rboles binarios para particin del espacio


(BSP tree)

rboles binarios para particin del espacio


(BSP tree)

rboles binarios para particin del espacio


(BSP tree)

rboles binarios para particin del espacio


(BSP tree)

Algoritmos de subdivisin de rea


Algoritmo de Warnock

Pol. Circundante

Pol. Intersecante

Pol. Contenido

Relacin entre Polgono y


Elemento de rea
Pol. Disjunto

Algoritmos de subdivisin de rea

Algoritmo de Warnock
Para decidir sobre pintar o subdividir un rea hay 4 casos:
1.- Tdos los polgonos son disjuntos respecto al rea. Con el
color de fondo se puede pintar el rea.
2.- Slo hay un polgono intersecante o contenido.
3.- Hay un solo polgono que intersecta al rea y es
circundante.
4.- Hay vrios polgonos intersecantes, uno de ellos es
circundante y est enfrente de los dems polgonos. Esto
se controla con los valores z de los polgonos en los 4
vrtices del rea.

Algoritmos de subdivisin de rea

Algoritmo de Warnock
y
x
x

z
z

Algoritmos de subdivisin de rea

Algoritmo de Warnock
x

En este caso se subdivide el


rea.
La reaccin es diferente al
algoritmo de ordenamiento
por profundidad, ya que en
este caso no sera necesario
subdividir.

Algoritmos de subdivisin de rea

Algoritmo de Warnock
2.- Slo hay un
polg. intersec. o
contenido.
4.- Hay varios polg.
intersec., uno de ellos
es circundante y est
enfrente de los dems
polg. Esto se controla
con los valores z de los
polg. en los 4 vrtices
del rea.

1.- Tdos los polg.


son disjuntos
respecto al rea.
Con el color de
fondo se puede
pintar el rea.
3.- Hay un
solo polg.
que intersecta
al rea y es
circundante.

Potrebbero piacerti anche