Primitivas de Despliegue 2D Héctor Navarro. Gráficos Raster La mayoría de los sistemas gráficos...

Post on 22-Jan-2016

226 views 0 download

Transcript of Primitivas de Despliegue 2D Héctor Navarro. Gráficos Raster La mayoría de los sistemas gráficos...

Primitivas de Despliegue 2D

Héctor Navarro

Gráficos Raster

• La mayoría de los sistemas gráficos actuales trabajan con una memoria de video que representa en forma de matriz la imagen a mostrar en el monitor

• Cada píxel es un elemento de esta matriz

SetPixel(x,y,c)

• La primitiva más básica de despliegue son puntos o píxeles. Para dibujar un píxel en la posición x, y con color c: (suponiendo un dispositivo de despliegue de w,h

X

Y

offset = (h-y)*w + x

mem[offset] = c.r;

mem[offset+1] = c.g;

mem[offset+2] = c.b;

Líneas

• Una línea está definida por sus dos extremos (x0,y0,x1,y1)

• Es necesario diferenciar casos según la pendiente:

Pendiente < 45°: por cada x hay un y

Líneas

• Una línea está definida por sus dos extremos (x0,y0,x1,y1)

• Es necesario diferenciar casos según la pendiente:

Pendiente < 45°: por cada y hay un x

Líneas

• Primer enfoque: evaluar la ecuación de la recta entre x0, x1:

Líneas

• Segundo enfoque: evitar evaluar la ecuación de la recta en cada iteración. Enfoque incremental:

(xi, yi)

(xi+1, yi+1)= (xi+1, yi+ Δy)

Δy

Δx=1

Líneas

• Segundo enfoque: evitar evaluar la ecuación de la recta en cada iteración.

Líneas

• Muy bien!... pero puede mejorarse?

• Eliminar aritmética flotante

• Algoritmo de Bresenham (algoritmo del punto medio)

Algoritmo de Bresenham

• Cada píxel se considera un cuadrado

• Se supone que el centro de cada píxel es una coordenada entera

• La frontera entre cada píxel está en la posición x+1/2

(x,y)

(x+1/2)

(y+1/2)

Algoritmo de Bresenham

Si la pendiente está entre 0 y 1 hay únicamente dos opciones: E, NE

E

NE

Algoritmo de Bresenham

La decisión se toma en base a la intersección entre la recta y el punto (x+1,y+0.5)

E

NE

(x,y)

(x+1,y+0.5)

Algoritmo de Bresenham

Algoritmo de Bresenham

Algunos detalles:

• Ordenar los puntos para que siempre x0 < x1 (o y0 < y1)

• Hacer un análisis parecido cuando m>1. En este caso las opciones son N, NE

Algoritmo del punto medio para circunferencias

• Por simetría es posible dibujar únicamente un octavo del círculo centrado en (0,0)

• La función SetPixelCircle(x,y,xc,yc) dibuja un píxel de un círculo centrado en xc, yc

Algoritmo del punto medio para circunferencias

Algoritmo del punto medio para circunferencias

(x, y)

Algoritmo del punto medio para circunferencias

(x, y)

(y, x)

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

(-x, y)

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

(-x, y)

(-y, -x)

(-x, -y) (x, -y)

(y, -x)

Algoritmo del punto medio para circunferencias

En ese octante, por cada valor x habrá un único valor y

Algoritmo del punto medio para circunferencias

En ese octante, por cada valor x habrá un único valor y

Algoritmo del punto medio para circunferencias

En cada píxel hay dos opciones para píxel siguiente

E

SE