130 likes | 288 Views
Visualización Computacional de Datos I. Graficando objetos 3D en el monitor. Nvert n 1 , x 1 , y 1 , z 1 n 2 , x 2 , y 2 , z 2 ……………. Npol n 1 , n 2 , n 3 n 1 , n 2 , n 3 ……………. Rotación. General. 0 0 0 1. x y z 1. x' y' z' 1. r 11 r 21 r 31 0. r 12 r 22 r 32 0.
E N D
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 0 0 0 1 x y z 1 x' y' z' 1 r11 r21 r31 0 r12 r22 r32 0 r13 r23 r33 0 = V’ = R. V
Proyección en perspectiva 0 0 0 0 x y z 1 x' y' z' w’ 1 0 0 0 0 1 0 0 0 0 1 1/d = V’ = P. R. V
Visibilidad • Como decidimos que se debe ver?
Ray Casting • Tirar un rayo y pintar solo el poligono más cercano
Algoritmo del pintor 5 7 3 4 6 2 1
Algoritmo del pintor • No siempre funciona!!!
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