martes, 5 de marzo de 2013

PRIMITIVAS GRAFICAS EN OPENGL


[Código en C++], (Línea DDA, Línea Bresenham, Circunferencia, etc.)
Los objetos presentes en una imagen se componen de primitivas simples (líneas, puntos) y que para poder graficarlas se hacen uso de algoritmos como DDA, Bresenham, etc., el sistema gráfico dibuja estas primitivas transformándolos en pixels -> Rasterización
Algoritmos DDA:
DeltaX = DeltaY / m
DeltaY = m * DeltaX
Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se determinan los valores enteros correspondientes más próximos a la trayectoria de la línea para la siguiente coordenada.
Se aceptan como datos de entradas las dos posiciones de los pixeles correspondientes a los extremos de la línea  P1(Xinicial,Yinicial) y P2(Xfinal,Yfinal). Las diferencias horizontal y vertical entre las posiciones de los extremos dados, se asignan a las varialbles DeltaX y DeltaY respectivamente. La diferencia con la mayor magnitud determina el valor del parámetro Pasos. Se procede a determinar la compensación necesaria(incremento), para generar la posición del pixel siguiente a lo largo de la trayectoria de la línea. Luego, se ilumina la posición en la pantalla. y  se repite este proceso cíclico Pasos Veces, hasta obtener la línea deseada.
Ejemplo:
Sigue leyendo para ver el resultado:
Para ejecutar el ejemplo es necesario tener la librería "graphics.h" de Borland.
#include <dos.h>
#include <stdio.h>
#include <graphics.h>
#include <math.h>
void DDA (int x1,int y1,int x2,int y2)
{
   float ax,ay,x,y,luz;
   int i;
   if(abs(x2-x1)>=abs(y2-y1))
   luz=abs(x2-x1);
   else
   luz=abs(y2-y1);
   ax=(x2-x1)/luz;
   ay=(y2-y1)/luz
   x=(float)x1;
   y=(float)y1;
i=1;
   while(i<=luz)
   {
putpixel((319+floor(x)),(239-floor(y)),9);
        x=x+ax;
 y=y+ay;
           
i=i+1;
   }
}
 
 

No hay comentarios:

Publicar un comentario