Visualización Computacional de
Datos I
Graficando objetos 3D en el monitor
Nvert
n1, x1, y1, z1
n2, x2, y2, z2
……………
Npol
n1, n2, n3
n1, n2, n3
……………
Rotación
General
x'
y'
z'
1
=
r11
r21
r31
0
r12
r22
r32
0
V’ = R . V
r13
r23
r33
0
0
0
0
1
x
y
z
1
Proyección en perspectiva
Proyección en perspectiva
x'
y'
=
z'
w’
1
0
0
0
0
1
0
0
0
0
1
1/d
V’ = P. R . V
0
0
0
0
x
y
z
1
Visibilidad
Como decidimos que se debe ver?
Ray Casting
Tirar un rayo y pintar solo el poligono
más cercano
Algoritmo del pintor
5
3
7
4
6
2
1
Algoritmo del pintor
No siempre funciona!!!
C
A
B
Ray Casting
Pseudocódigo:
Para cada píxel hacer:
Construir un rayo desde el ojo
Para cada objeto en la escena hacer:
Calcular intersección con el rayo
Retornar en la primera intersecció (objeto + cercano)
Z buffer
Ademas del frame buffer (R, G, B)
Almacenar la distancia a la cámara (z-buffer)
Pixel es pintado solo si el nuevo z es más alto que
el valor en el z-buffer value
Z-buffer pseudo code
For every triangle
Compute Projection, color at vertices
Setup line equations
Compute bbox, clip bbox to screen limits
For all pixels in bbox
Increment line equations
Compute curentZ
Increment currentColor
If all line equations>0 //pixel [x,y] in triangle
If currentZ<zBuffer[x,y] //pixel is visible
Framebuffer[x,y]=currentColor
zBuffer[x,y]=currentZ
Funciona en todos los casos!
C
A
B
Descargar

Questions?