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 ……………
Rotación General x' y' z' 1 = xyz1xyz1 r 12 r 22 r r 11 r 21 r 31 0 r 13 r 23 r 33 0 R V’ = R. V
Proyección en perspectiva
x' y' z' w’ = xyz1xyz /d P. R 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
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
Funciona en todos los casos!