libreria opengl

Post on 22-Mar-2016

246 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

librerias opengl

TRANSCRIPT

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

}

}

}

top related