Sei sulla pagina 1di 11

Graficacin

Grfica
lneas
crculos

con
y

Andrea Estephany Snchez Hernndez


201225072

Ivn Olmos Pineda

Contenido
Introduccin..................................................................................................... 3
Conceptos Desarrollados................................................................................ 3
Uso de GL_LINE_STRIP............................................................................... 3
Uso de GL_POINTS....................................................................................... 4
Cdigo................................................................................................................ 5
Dibujo................................................................................................................ 9
Conclusiones................................................................................................... 10
Bibliografa..................................................................................................... 10

Introduccin
Recordando que en un sistema de coordenadas rectangulares se puede
localizar un punto con un par de coordenadas (x, y), estos valores son
las distancias dirigidas partiendo del origen, desde los ejes x y y. Y al
tener dos pares de coordenadas podemos graficar una simple lnea
(considerando su pendiente), es importante recordar la definicin de
lnea (La lnea est considerada como una sucesin de puntos), de
esta manera al tener dos pares de coordenadas se puede graficar una
lnea utilizando un ciclo para graficar los puntos intermediarios entre los
dos puntos principales.

Conceptos Desarrollados
Uso de GL_LINE_STRIP
Al usar implementar las libreras de OpenGl tenemos el uso de
comandos mejor conocidos como primitivas las cuales son definidas
como la manera en que OpenGl interpreta flujos de vrtices,
convirtindolos de vrtices en puntos, tringulos. Existen tres tipos de
lneas primitivas basadas en diferentes interpretaciones del flujo de
vrtices, la que definiremos ser GL_LINE_STRIP. El cual basa su
comportamiento considerando los vrtices adyacentes como lneas, por
este motivo si se ingresan n vrtices se obtendrn n-1 lneas, para esto
es importante mencionar que se deber especificar un vrtice ms (se
recomienda colocar el vrtice donde se inici el dibujo) y se debe tener
en mente que si se ingresar un solo vrtice se ignorar el comando y
no mostrar nada en pantalla.
Para generar una lnea con este comando tendremos dentro de nuestra
funcin las siguientes lneas de pseucdigo:
glBegin(GL_LINE_STRIP);
glVertex2i(2,2);
glVertex2i(10,10);
glEnd();

Uso de GL_POINTS
Existe solo un tipo de punto primitivo: GL_POINTS. De esta manera
OpenGl interpretara cada vrtice individual como un punto. Al usar este
comando para crear una lnea es importante el uso de ciclos para
generar los puntos intermediarios entre los dos vrtices los cuales
definirn el inicio y fin de nuestra lnea.

Para generar nuestra lnea con este comando tendremos dentro de


nuestra funcin el siguiente pseudocdigo:
Double m,x,c;
M=(y2-y1)/(x2-x1);
For( float y = y1; y<= y2; y+= 0.1 )
{
glBegin( GL_POINTS );
glVertex2f( x, c );
glEnd();
c += ( 0. 1 * m );

Cdigo
#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
void inicializa(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-30, 30, -30, 30);
}

void circulo(int x, int y, int r)


{

glBegin(GL_POINTS);
glVertex2f(x,y);

for (int i=0;i<=360; i++){ glVertex2f(x + sin(i) * r, y + cos(i) *


r);}
glEnd();
}

void coche(float x1, float y1, float x2, float y2)


{
float a=x2 -x1, b=y2-y1, x, m, c;

if( round(a) == 0 )

{
x = x1;
for( float y = y1; y<= y2; y+= 0.001 )
{
glBegin( GL_POINTS );
glVertex2f( x, y );
glEnd();
}
}
else
{
m=b/a;
c = y1;
for(float x=x1; x <= x2; x+=0.001)
{
glBegin(GL_POINTS);
glVertex2f( x, c);
glEnd();

c += ( 0.001 * m );
}
}
}

void dibuja(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0,0.0,0.0);
circulo(1,3,1);
circulo(3,3,1);
circulo(2,3,3);
glColor3f(0.5,0.5,0.5);
circulo(6,-8,2);
circulo(-13,-8,2);
glColor3f(0.0,0.0,1.0);
circulo(6,-8,3);
circulo(-13,-8,3);
coche(-13,7,6,7);
coche(6,-1,6,7);
coche(-13,-1,-13,7);
coche(-2,-1,-2,7);
coche(-22,-1,16,-1);
coche(-22,-8,-22,-1);
coche(-22,-8,-16,-8);
coche(-16,-8,-16,-5);
coche(-16,-5,-10,-5);
coche(-10,-8,-10,-5);
coche(-10,-8,3,-8);
coche(3,-8,3,-5);
coche(3,-5,9,-5);
coche(9,-8,9,-5);
coche(9,-8,16,-8);
coche(16,-8,16,-1);
coche(16,-1,6,-1);

glColor3f(0.0,0.0,0.0);
glBegin(GL_LINE_STRIP);
glVertex2f(2,2);
glVertex2f(1.5,1.5);
glVertex2f(2,1.5);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex2f(1,1);
glVertex2f(1,0.5);
glVertex2f(3,0.5);
glVertex2f(3,1);
glEnd();

glFlush();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowSize(450,450);
glutInitWindowPosition(200,200);
glutCreateWindow("Coche");
inicializa();
glutDisplayFunc(dibuja);
glutMainLoop();
return 0;

Dibujo
Esta es la grfica que mostrar el programa al ser compilado

Conclusiones
En esta ocasin tuvimos dos caminos a seguir para graficar lneas
usando dos tipos de primitivas diferentes, el uso de cada una varia en
casa caso y en la decisin del usuario. Por mi parte, considero ms fcil
el uso de la primitiva para lneas al representar gran ahorro en el cdigo
aunque para mayor precisin y objetividad del dibujo es importante usar
la primitiva para puntos.

Bibliografa
1.- rea del dibujo. (2015). La lnea. 26/01/2015, de rea del dibujo
Sitio
web:
http://www.areadedibujo.es/documentos/1-eso/1esolinea.pdf
2.- OpenGl. (2015). Primitive. 26/01/2015, de OpenGL Sitio web:
https://www.opengl.org/wiki/Primitive

Potrebbero piacerti anche