libreria opengl

7
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

Upload: antonio-limon-martinez

Post on 22-Mar-2016

246 views

Category:

Documents


0 download

DESCRIPTION

librerias opengl

TRANSCRIPT

Page 1: Libreria OPENGL

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

Page 2: Libreria OPENGL

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

Page 3: Libreria OPENGL
Page 4: Libreria OPENGL
Page 5: Libreria OPENGL

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();

Page 6: Libreria OPENGL

}

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

Page 7: Libreria OPENGL

}

}

}