![]() |
||||
Download Policy: Content on the Website is provided to you AS IS for your information and personal use only and may not be sold or licensed nor shared on other sites. SlideServe reserves the right to change this policy at anytime.
While downloading, If for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
1. Rendering
3. Representación (Rasterization) Se dispone de:
Topología de la escena
Coordenadas de los vértices proyectados
Intensidades en los vértices o en cada punto
Coordenada z de los vértices
Se desea obtener:
Color en cada pixel
4. Representación de una línea Dadas las coordenadas de dos vértices
Determinar los pixels que deben marcarse
Produce efectos incorrectos marcar todos los pixels por los que pasa
5. Algoritmo DDA (Digital Diferential Analyzer)
dx = xb - xa
dy = yb - ya
x = xa
y = ya
If (Abs(dx) > Abs(dy)) Then
steps = Abs(dx)
Else
steps = Abs(dy)
End If
xIncrement = dx / steps
yIncrement = dy / steps
Call Plot(x, y)
For k = 0 To steps - 1
x = x + xIncrement
y = y + yIncrement
Call Plot(x, y)
Next k
6. Algoritmo de Bresenham DDA trabaja con números reales
El algoritmo de Bresenham se desarrolló para plotters digitales
Se basa en:
incrementar en el sentido mayor
la otra coordenada se incrementa 0 o 1
Se controla por el error entre la línea y el orígen del píxel más cercano
7. Algoritmo de Bresenham El error se incrementa con el valor de la pendiente: e = e + dy/dx
Cuando el error es superior a 1/2:
se incrementa y
se resta 1 al error
Se comienza con
e = -1/2
se controla e > 0
8. Algoritmo de Bresenham Operaciones con e:
Inicio: e = dy/dx - 1/2
Incremento: e = e + dy/dx
Control: if (e>0) then e = e -1, x = x + 1
x e y son enteros
e es real
Para trabajar con enteros, se multiplica el error por 2 • dx
9. Algoritmo de Bresenham dx = Abs(xa - xb)
dy = Abs(ya - yb)
e = 2 * dy - dx
If (xa > xb) Then
x = xb
y = yb
xEnd = xa
Else
x = xa
y = ya
xEnd = xb
End If
Call Plot(x, y)
Do While (x < xEnd)
x = x + 1
If (e > 0) Then
y = y + 1
e = e - 2 * dx
End If
e = e + 2 * dy
Call Plot(x, y)
Loop
10. Representación de polígonos Se procesa cada línea (scan line)
Se rellena entre el inicio y final de cada arista
11. Representación de aristas de polígonos Se necesita un pixel por línea horizontal (scan line)
Se basan en modificaciones de los algoritmos DDA o de Bresenham, ejemplo con DDA:
dx = xb - xa
dy = yb - ya
x = xa
increment = dx / dy
For y = ya To yb
Call Plot(x, y)
x = x + increment
Next y
12. Rellenado entre aristas En cada línea hay un número par de aristas
En polígonos convexos son siempre 2
Se realiza el sombreado y la coordenada z
El modo de representación se puede realizar
scan line
polígono por polígono
13. Scan Line Se genera la imagen línea a línea
Para cada línea
lista de aristas en la línea (añadir y eliminar)
en cada pixel, obtener valores de los polígonos en el pixel a partir de sus aristas (incrementalmente)
representar el pixel del polígono más cercano
14. Polígono por polígono Se genera la imagen polígono por polígono
Para cada polígono
Para cada línea entre ymax e ymin del polígono
obtener lista de aristas en la línea
representar los pixels entre estas aristas si no hay representado otro polígono más cercano (se almacena también el valor de z)
15. Eliminación de superficies ocultas Han existido históricamente distintos métodos
Se puede comentar el algoritmo del pintor
El utilizado habitualmente es el Z-buffer
es el único posible en representación polígono por polígono
implementado en hardware
16. Z buffer Una matriz con los valores de z en cada pixel
Permite representar los polígonos de forma independiente
Al representar un polígono, se comparan sus pixels con los almacenados y si son visibles se representan y substituyen el valor de z
17. Creación de escenas Esquema (storyboard)
Modelos de los objetos
Posición
Rendering inicial
Modificaciones
Rendering final