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

24
Primitivas de Despliegue 2D Héctor Navarro

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

Page 1: 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.

Primitivas de Despliegue 2D

Héctor Navarro

Page 2: 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.

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

Page 3: 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.

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;

Page 4: 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.

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

Page 5: 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.

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

Page 6: 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.

Líneas

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

Page 7: 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.

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

Page 8: 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.

Líneas

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

Page 9: 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.

Líneas

• Muy bien!... pero puede mejorarse?

• Eliminar aritmética flotante

• Algoritmo de Bresenham (algoritmo del punto medio)

Page 10: 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.

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)

Page 11: 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.

Algoritmo de Bresenham

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

E

NE

Page 12: 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.

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)

Page 13: 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.

Algoritmo de Bresenham

Page 14: 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.

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

Page 15: 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.

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

Page 16: 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.

Algoritmo del punto medio para circunferencias

Page 17: 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.

Algoritmo del punto medio para circunferencias

(x, y)

Page 18: 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.

Algoritmo del punto medio para circunferencias

(x, y)

(y, x)

Page 19: 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.

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

Page 20: 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.

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

(-x, y)

Page 21: 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.

Algoritmo del punto medio para circunferencias

(x, y)

(-y, x) (y, x)

(-x, y)

(-y, -x)

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

(y, -x)

Page 22: 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.

Algoritmo del punto medio para circunferencias

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

Page 23: 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.

Algoritmo del punto medio para circunferencias

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

Page 24: 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.

Algoritmo del punto medio para circunferencias

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

E

SE