libreria opengl
DESCRIPTION
librerias openglTRANSCRIPT
S.E.P. D.G.E.S.T. D.I.T.D.
INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES
Organismo Público Descentralizado del Gobierno del Estado de Puebla
INGENIERÍA EN SISTEMAS COMPUTACIONALES
“INTALACION Y LIBRERIAS DE OPENGL”
PRESENTA:
ANTONIO LIMÓN MARTÍNEZ
LIBRES, PUEBLA, ENERO 2012
1.1.2 Algoritmo de Línea DDA
El analizador diferenciador digital (DDA - Digital Differential Analyzer) es un algoritmo de
conversión de rastreo que se basa en el calculo ya sea de Dy o Dx por medio de las ecuaciones.
Explicación del algoritmo
Es un algoritmo que se basa en el cálculo y la evaluación de un DeltaX (X) y un DeltaY(Y). Por medio de las siguientes ecuaciones:
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 variables 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.
http://www.nosolounix.com/2010/04/algoritmo-dda-dibujar-linea.html
Modificaciones correspondientes para el trazo de líneas de los siguientes tipos
a. Aumento del grosor
b. Línea punteada
Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tao.OpenGl;
using Tao.FreeGlut;
namespace ConsoleApplication6
{
class Program
{
static double x1, y1, x2, y2;
static void Main(string[] args)
{
Console.WriteLine("introduzca el valor de X1");
x1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("introduzca el valor de Y1");
y1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("introduzca el valor de X2");
x2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("introduzca el valor de Y2");
y2 = Convert.ToDouble(Console.ReadLine());
Glut.glutInit();//funciones propias de opengl
Glut.glutInitDisplayMode(Glut.GLUT_SINGLE |
Glut.GLUT_RGB);
Glut.glutInitWindowSize(640, 480);//creamos una ventana
Glut.glutCreateWindow("**************Algoritmo
DDA**************");//colocamos titulo a la ventana
//llamamos a la funcion dda
Glut.glutDisplayFunc(dda);
Glut.glutMainLoop();
}
public static void dda()
{
//componentes necesarios de opengl
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de
la pantall
Gl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixeles
Gl.glLoadIdentity();//''muy importante;
Gl.glPointSize(2.0f);//medida de los puntos
Gl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos
//dibujando el plano
float z = -1, w = 1, c = 0;
for (int i = 0; i < 200; i++)
{
Gl.glColor3f(w, c, z);
Gl.glVertex2d(z, 0);
Gl.glVertex2d(0, w);
z += .01f;
w -= .01f;
c += .1f;
}
Gl.glEnd();//termina funcion para dibujar puntos
///pasamos las
Gl.glPointSize(5.0f);//sirve para el tamaño de los pixeles
Gl.glColor3f(0.6f, 1.0f, 0.6f);//sirve para el color de
los pixeles
ddaDibujar(x1, y1, x2, y2);
}
public static void ddaDibujar(double x1, double y1, double x2,
double y2)
{
double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =
y2, x, y;
double deltax, deltay, xincremento, yincremento;
double pasos;
deltax = xfinal - xinicial;
deltay = yfinal - yinicial;
if (Math.Abs(deltax) > Math.Abs(deltay))
pasos = Math.Abs(deltax);
else
pasos = Math.Abs(deltay);
xincremento = (deltax / pasos) / 5;
yincremento = (deltay / pasos) / 5;
x = xinicial;
y = yinicial;
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2d(x, y);
for (double k = .1; k <= pasos; k += .1)
{
x = (x + xincremento);
y = (y + yincremento);
Gl.glVertex2d(x, y);
}
Gl.glEnd();
//termina dda
}
}
}