Manual de Practicas de Open GL con Dev C++

90
Colegio de Estudios Científicos Y Tecnológicos del Estado de México Cecytem Plantel Tecámac Materia: Utilización de Software de Diseño Profesor: Rene Domínguez Escalona Alumno(s): Karen Alin Simón García y Brandon Cervantes García Titulo: “Manual de prácticas de Open GL” Proyecto 2° parcial 1

Transcript of Manual de Practicas de Open GL con Dev C++

Page 1: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Cecytem Plantel Tecámac

Materia: Utilización de Software de Diseño

Profesor: Rene Domínguez Escalona

Alumno(s): Karen Alin Simón García y Brandon Cervantes García

Titulo:

“Manual de prácticas de Open GL”

Proyecto 2° parcial

Informática

1

Page 2: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

3° Semestre

¿Qué es OpenGL?

Las librerías gráficas OpenGL, son un software que facilita el interface con el hardware gráfico de nuestra máquina. Consta de unas 120 funciones distintas, que especifican los objetos y las operaciones necesarias para producir aplicaciones interactivas en las que intervienen gráficos en tres dimensiones.

Esta diseñado de forma completamente independiente del hardware por lo que puede implementarse en plataformas muy diversas (PC, SGI, Digital, Sun, etc…. El precio que hay que pagar en aras de esta portabilidad, es que OpenGL no incluye comandos para gestionar el sistema de ventanas, ni para capturar órdenes de los usuarios, ya sea por ratón o por teclado. En lugar de esto, debemos trabajar con la ayuda de cualquier sistema de ventanas que se utilice en la máquina en concreto en la que estemos trabajando. En nuestro caso utilizaremos el sistema de ventanas de Windows.

Librerías De OpenGL.

La librería principal de OpenGL nos suministra todas las funciones necesarias para mostrar un entorno 3D aunque hay algunas operaciones que son algo tediosas de realizar utilizando solo esta librería. Estas son por ejemplo calcular la matriz de proyección. Para esto se han desarrollado también unas librerías auxiliares:

GLU: Esta librería acompaña a la OpenGL principal. Incluye funciones más complejas que GL por ejemplo definir un cilindro o un disco con un solo comando, también contiene funciones para trabajar con splines y operaciones con matrices.

GLUT: Esta librería es independiente de la librería OpenGL de cada plataforma. Esta librería no incluye funciones adiconales para OpenGL :( pero nos permite utilizar funciones para el tratamiento de ventanas, teclado y ratón. Para trabajar con OpenGL en cualquier plataforma, primero tenemos que inicializar una ventana (y esto es diferente entre Windows y Linux por ejemplo). GLUT nos permite crear ventanas y controlar la entrada independientemente de la plataforma utilizada :). Aunque también contiene comandos para crear conos, tazas de té...

GLAUX: Esta librería, muy parecida a GLUT, es la que Microsoft ha desarrollado para Windows. Mantiene prácticamente la misma estructura que la GLUT con el

2

Page 3: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

defecto de que solo sirve para Windows, mientras que GLUT sirve para cualquier plataforma.

GLX: Esta es la librería utilizada para trabajar en un sistema de X-Windows (Linux), permite no sólo rende rizar en la máquina local, sino también a través de una red.

Configuración de Dev-C++ en Windows para OpenGL

Los programas de ejemplo están hechos bajo lenguaje C, así que se requiere un compilador. Si se trabaja en alguna distribución de Linux, seguro cuenta con los compiladores GCC y G++.

Si se trabaja en ambiente Win32 se puede usar un compilador de Borland, de Microsoft y también un compilador de software libre como el Bloodshed Dev-C++ el cual usa el Mingw y se puede obtener en http://www.bloodshed.net/dev/devcpp.html.

Cualquiera de ellos al momento de instalarse ya incluyen las librerías gl y glu, por lo cual sólo nos hace falta la librería de glut, que es la usada para el manejo de ventanas y eventos. En la página http://www.opengl.org/resources/libraries/glut.html viene información de donde bajar glut, es importante hacer notar que los archivos .a son creados para cada compilador, por lo tanto es necesario bajar la librería apropiada de acuerdo al que se haya instalado.

SourceForge, mantiene una versión de glut más actualizada llamada openglut, información y archivos para descargar se encuentran en http://openglut.sourceforge.net/index.html. Otro sitio donde se puede encontrar glut y openglut para Dev-C++ es: http://www.nigels.com/glt/devpak.

Una vez que se han descargado los archivos para glut, la instalación es muy sencilla: El archivo glut32.dll se coloca bajo el directorio Windows/system32, el archivo glut.h se coloca bajo include/GL y libglut32.a se coloca bajo lib, ambos del directorio de instalación del Dev-C++

Una vez colocados los archivos donde corresponde, sólo hace falta configurar el Dev-C++ para compilar los programas. Existen varias formas, una es creando un proyecto y se puede consultar en la página de Linux de Acatlán: http://www.acatlan.unam.mx/linux/graficacion/compilawindows.html.Otra manera es sólo compilar el programa con las opciones apropiadas, para esto se abre el menú Herramientas>Opciones del Compilador:

3

Page 4: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Después se marca el recuadro junto a “Añadir estos comandos a la línea de comandos del linker” y se agregan los nombres de las librerías -lglut32 -lglu32 -l opengl32. Esto sólo se hace una vez y después se puede compilar cualquier programa de OpenGL con glut.

Índice

1. Tablero de Ajedrez2. Estrella3. Cubo con líneas 4. Cubo delineado5. Muñeco con triángulos6. Casita7. Oso8. Cubo con cubitos9. Muñeco con formas10.Animación circulo11.Animación circulo rotando12.Animación sistema solar 13.Movimiento en ocho14.Semáforo15.Objetos 3D Wire (9)16.Objetos 3D Solid (9)17. Interacción Teclado18. Interacción con mouse19. Interacción de objetos 3D con mouse y teclado20.Cubo 3D con líneas

4

Page 5: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

PracticasTablero de Ajedrez:

//tablero de ajedrez

#include <GL/glut.h>

#include <GL/gl.h>

#include <GL/glu.h>

void inicializa(void)

{

glClearColor(0.0,3.0,5.0,1.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 1050.0, 0.0, 1000.0); //vista ortogonal

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(0.0 , 0.0 , 0.0);

glPointSize(60);

glBegin(GL_POINTS);

glVertex2i(100,100);

glVertex2i(347,100);

5

Page 6: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(597,100);

glVertex2i(848,100);

glVertex2i(220,220);

glVertex2i(473,220);

glVertex2i(723,220);

glVertex2i(970,220);

glVertex2i(100,340);

glVertex2i(347,340);

glVertex2i(597,340);

glVertex2i(848,340);

glVertex2i(220,460);

glVertex2i(473,460);

glVertex2i(723,460);

glVertex2i(970,460);

glVertex2i(100,580);

glVertex2i(347,580);

glVertex2i(597,580);

glVertex2i(848,580);

glVertex2i(220,700);

glVertex2i(473,700);

glVertex2i(723,700);

glVertex2i(970,700);

glVertex2i(100,820);

glVertex2i(347,820);

glVertex2i(597,820);

glVertex2i(848,820);

6

Page 7: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glEnd();

glColor3f(1.0 , 1.0 , 1.0);

glPointSize(60);

glBegin(GL_POINTS);

glVertex2i(220,100);

glVertex2i(473,100);

glVertex2i(723,100);

glVertex2i(970,100);

glVertex2i(100,220);

glVertex2i(347,220);

glVertex2i(597,220);

glVertex2i(848,220);

glVertex2i(220,340);

glVertex2i(473,340);

glVertex2i(723,340);

glVertex2i(970,340);

glVertex2i(100,460);

glVertex2i(347,460);

glVertex2i(597,460);

glVertex2i(848,460);

glVertex2i(220,580);

glVertex2i(473,580);

glVertex2i(723,580);

glVertex2i(970,580);

glVertex2i(100,700);

glVertex2i(347,700);

7

Page 8: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(597,700);

glVertex2i(848,700);

glVertex2i(220,820);

glVertex2i(473,820);

glVertex2i(723,820);

glVertex2i(970,820);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(0,0); //posicion inicial de la ventana

glutCreateWindow("TABLERO DE AJEDREZ"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

8

Page 9: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Estrella

//estrella

#include <GL/glut.h>

#include <GL/gl.h>

#include <GL/glu.h>

void inicializa(void)

{

glClearColor(0.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0); //vista ortogonal

}

void dibuja(void) //funcion dibuja

{

9

Page 10: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glLineWidth(2);

glBegin(GL_LINES);

glVertex2i(50,50);

glVertex2i(250,400);

glVertex2i(250,400);

glVertex2i(400,50);

glVertex2i(400,50);

glVertex2i(50,300);

glVertex2i(50,300);

glVertex2i(400,300);

glVertex2i(400,300);

glVertex2i(50,50);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(0,0); //posicion inicial de la ventana

glutCreateWindow("estrella"); //nombre de la ventana

inicializa();

10

Page 11: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

Cubo con líneas

//cubo con lineas

#include <GL/glut.h>

#include <GL/gl.h>

#include <GL/glu.h>

void inicializa(void)

{

glClearColor(0.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

11

Page 12: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0); //vista ortogonal

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glLineWidth(2);

glBegin(GL_LINES);

//enfrente

glVertex2i(50,50);

glVertex2i(50,300);

glVertex2i(50,300);

glVertex2i(300,300);

glVertex2i(300,300);

glVertex2i(300,50);

glVertex2i(300,50);

glVertex2i(50,50);

//atras

glVertex2i(150,150);

glVertex2i(150,400);

glVertex2i(150,400);

glVertex2i(400,400);

glVertex2i(400,400);

12

Page 13: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(400,150);

glVertex2i(400,150);

glVertex2i(150,150);

//linea izquierda

glVertex2i(50,300);

glVertex2i(150,400);

//linea derecha

glVertex2i(300,300);

glVertex2i(400,400);

//linea izquierda abajo

glVertex2i(50,50);

glVertex2i(150,150);

//linea derecha abajo

glVertex2i(300,50);

glVertex2i(400,150);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

13

Page 14: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(0,0); //posicion inicial de la ventana

glutCreateWindow("mi primera ventana"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

Cubo delineado

//cubo delineado

#include <GL/glut.h>

14

Page 15: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

#include <GL/gl.h>

#include <GL/glu.h>

void inicializa(void)

{

glClearColor(0.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0); //vista ortogonal

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(1.0 , 0.0 , 0.0);

glPointSize(50);

glBegin(GL_QUADS);

//ATRAS

glColor3f(0.0 , 0.0 , 0.0);

glVertex2d(100,150);

glVertex2d(300,100);

glVertex2d(300,350);

glVertex2d(100,350);

//ABAJO

glColor3f(0.0 , 0.0 , 0.0);

15

Page 16: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2d(200,100);

glVertex2d(400,100);

glVertex2d(300,150);

glVertex2d(100,150);

//izquierdo

glColor3f(0.0 , 0.1 , 0.1);

glVertex2d(100,150);

glVertex2d(200,100);

glVertex2d(200,300);

glVertex2d(100,350);

//derecho

glColor3f(1.1 , 1.1 , 1.1);

glVertex2d(300,150);

glVertex2d(400,100);

glVertex2d(400,300);

glVertex2d(300,350);

//arriba

glColor3f(1.2 , 0.0 , 0.0);

glVertex2d(200,300);

glVertex2d(400,300);

glVertex2d(300,350);

glVertex2d(100,350);

//enfrente

glColor3f(1.5 , 1.5 , 0.0);

16

Page 17: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2d(200,100);

glVertex2d(400,100);

glVertex2d(400,300);

glVertex2d(200,300);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(0,0); //posicion inicial de la ventana

glutCreateWindow("mi primera ventana"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

17

Page 18: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Muñeco con Triángulos

#include <GL/glut.h>

#include <GL/gl.h>

#include <GL/glu.h>

void inicializa(void)

{

glClearColor(0.0,0.0,0.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0); //vista ortogonal

}

18

Page 19: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(1.0 , 0.0 , 1.0);

glLineWidth(5);

glBegin(GL_TRIANGLES);

glVertex2i(97,12);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(167,12);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(167,54);

glVertex2i(140,55);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(190,55);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(190,145);

glVertex2i(260,12);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(333,12);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(260,54);

glVertex2i(240,54);

glColor3f(1.0 , 0.0 , 1.0);

19

Page 20: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(290,54);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(240,145);

glVertex2i(145,375);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(300,375);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(230,455);

glVertex2i(320,300);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(320,150);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(275,300);

glVertex2i(150,300);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(110,300);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(110,150);

glVertex2i(150,300);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(110,300);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(110,150);

20

Page 21: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(260,380);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(183,380);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(219,309);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(340,30);

glVertex2i(395,30);

glVertex2i(420,130);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(340,30);

glVertex2i(395,30);

glVertex2i(420,130);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(372,181);

glVertex2i(330,208);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(326,150);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(102,152);

glVertex2i(59,179);

glColor3f(0.0 , 0.0 , 1.0);

glVertex2i(101,208);

glEnd();

21

Page 22: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glBegin(GL_QUADS);

glVertex2i(155,155);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(155,305);

glVertex2i(280,305);

glColor3f(1.0 , 0.0 , 1.0);

glVertex2i(280,155);

glColor3f(010 , 1.0 , .0);

glVertex2i(350,250);

glColor3f(0.0 , 1.0 , .0);

glVertex2i(370,420);

glColor3f(0.0 , 1.0 , .0);

glVertex2i(490,250);

glColor3f(1.0 , 1.0 , .0);

glVertex2i(420,135);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

22

Page 23: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutInitWindowPosition(0,0); //posicion inicial de la ventana

glutCreateWindow("Muñeco con triangulos"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

Casita

#include <GL/glut.h>

#include <GL/gl.h>

#include <GL/glu.h>

23

Page 24: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

void inicializa(void)

{

glClearColor(0.0,0.0,1.0,1.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 900.0, 0.0, 900.0);

}

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.12 ,0.12 ,0.12 );

glLineWidth(2);

glBegin(GL_QUADS);

glVertex2i(0,80);

glVertex2i(1000,80);

glVertex2i(1000,0);

glVertex2i(0,0);

glEnd();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINES);

glVertex2i(0,40);

glVertex2i(50,40);

glVertex2i(70,40);

glVertex2i(120,40);

24

Page 25: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(140,40);

glVertex2i(190,40);

glVertex2i(210,40);

glVertex2i(260,40);

glVertex2i(280,40);

glVertex2i(330,40);

glVertex2i(350,40);

glVertex2i(400,40);

glVertex2i(420,40);

glVertex2i(470,40);

glVertex2i(490,40);

glVertex2i(540,40);

glVertex2i(560,40);

glVertex2i(610,40);

glVertex2i(630,40);

glVertex2i(680,40);

glVertex2i(700,40);

glVertex2i(750,40);

glVertex2i(770,40);

glVertex2i(820,40);

glVertex2i(840,40);

glVertex2i(890,40);

glEnd();

glColor3f(1.0 ,1.0 ,0.0 );

25

Page 26: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glLineWidth(5);

glBegin(GL_LINES);

glVertex2i(0,84);

glVertex2i(1000,84);

glEnd();

glColor3f(0.21,0.21,0.21);

glBegin(GL_POLYGON);

glVertex2i(0,118);

glVertex2i(345,118);

glVertex2i(345,193);

glVertex2i(405,193);

glVertex2i(405,118);

glVertex2i(1000,118);

glVertex2i(1000,88);

glVertex2i(0,88);

glEnd();

glColor3f(0.0,1.0,0.0);

glBegin(GL_POLYGON);

glVertex2i(0,118);

glVertex2i(0,238);

glVertex2i(75,238);

glVertex2i(75,193);

glVertex2i(345,193);

26

Page 27: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(345,118);

glVertex2i(0,118);

glEnd();

glColor3f(0.0,1.0,0.0);

glBegin(GL_POLYGON);

glVertex2i(405,119);

glVertex2i(405,193);

glVertex2i(540,193);

glVertex2i(540,239);

glVertex2i(1000,239);

glVertex2i(1000,119);

glVertex2i(405,119);

glEnd();

glColor3f(1.0,0.52,0.05);

glBegin(GL_QUADS);

glVertex2i(75,193);

glVertex2i(75,313);

glVertex2i(90,313);

glVertex2i(90,193);

glEnd();

glColor3f(1.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2i(61,313);

27

Page 28: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(75,345);

glVertex2i(210,345);

glVertex2i(210,313);

glEnd();

glColor3f(0.80,0.80,0.80);

glBegin(GL_QUADS);

glVertex2i(90,193);

glVertex2i(90,313);

glVertex2i(210,313);

glVertex2i(210,193);

glEnd();

glColor3f(1.0,1.0,0.28);

glBegin(GL_QUADS);

glVertex2i(210,193);

glVertex2i(210,450);

glVertex2i(540,450);

glVertex2i(540,193);

glEnd();

glColor3f(0.95,0.47,0.0);

glBegin(GL_QUADS);

glVertex2i(210,313);

glVertex2i(210,328);

glVertex2i(540,328);

glVertex2i(540,313);

28

Page 29: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glEnd();

glColor3f(0.95,0.47,0.0);

glBegin(GL_QUADS);

glVertex2i(330,193);

glVertex2i(330,434);

glVertex2i(344,434);

glVertex2i(344,193);

glEnd();

glColor3f(0.95,0.47,0.0);

glBegin(GL_QUADS);

glVertex2i(405,434);

glVertex2i(420,434);

glVertex2i(420,193);

glVertex2i(405,193);

glEnd();

glColor3f(0.77,0.0,0.0);

glBegin(GL_TRIANGLES);

glVertex2i(316,434);

glVertex2i(375,480);

glVertex2i(434,434);

glEnd();

glColor3f(1.0,0.0,0.0);

glBegin(GL_POLYGON);

29

Page 30: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(164,449);

glVertex2i(209,494);

glVertex2i(539,494);

glVertex2i(584,449);

glVertex2i(449,415);

glVertex2i(374,480);

glVertex2i(335,449);

glEnd();

glFlush();

}

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);

glutInitWindowSize(1000,1000);

glutInitWindowPosition(0,0);

glutCreateWindow("Casa");

inicializa();

glutDisplayFunc(dibuja);

glutMainLoop();

return 0;

}

30

Page 31: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Oso

//oso

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

void inicializa(void)

{

glClearColor(1.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 500.0, 0.0, 500.0); //vista ortogonal

}

31

Page 32: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

void circuloc(int x, int y, int t, int radio)

{

int angulo=0;

glPointSize(t);

glBegin(GL_POINTS);

//glColor3f (1.0, 0.0, 1.0);

glVertex2f(x,y);

//glColor3f(0,0.0,0.0);

for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

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

{

int angulo=0;

glBegin(GL_TRIANGLE_FAN);

// glColor3f (1.0, 0.0, 1.0);

glVertex2f(x,y);

for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

32

Page 33: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.8,0.5,0.4); //borra pantalla

circulo(190,190,40);

glColor3f(0.7,0.2,0.4);

circulo(190,190,20);

glColor3f(0.8,0.5,0.4);

circulo(315,315,40);

glColor3f(0.7,0.2,0.4);

circulo(315,315,20);

glColor3f(0.8,0.5,0.4);

circulo(190,315,40);

glColor3f(0.7,0.2,0.4);

circulo(190,315,20);

glColor3f(0.8,0.5,0.4);

circulo(315,190,40);

glColor3f(0.7,0.2,0.4);

circulo(315,190,20);

glColor3f(0.8,0.5,0.4);

circulo(250,360,60);

glColor3f(1.0,1.0,1.0);

circulo(270,380,15);

glColor3f(0.0,0.0,0.0);

33

Page 34: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

circulo(270,380,10);

glColor3f(1.0,1.0,1.0);

circulo(230,380,15);

glColor3f(0.0,0.0,0.0);

circulo(230,380,10);

glColor3f(0.0,0.0,0.0);

circulo(250,340,15);

glColor3f(0.8,0.5,0.4);

circulo(300,420,25);

glColor3f(0.7,0.2,0.4);

circulo(300,420,10);

glColor3f(0.8,0.5,0.4);

circulo(200,420,25);

glColor3f(0.7,0.2,0.4);

circulo(200,420,10);

glColor3f(0.7,0.2,0.6);

circulo(250,250,50);

glColor3f(0.8,0.5,0.4);

circuloc(250,250,5,50);

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

34

Page 35: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(100,100); //posicion inicial de la ventana

glutCreateWindow("Ventana"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

35

Page 36: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Cubo con Cubitos

//cubo de cubos

#include <GL/glut.h>

#include <GL/gl.h>

void inicializa(void)

{

glClearColor(1.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 570.0, 0.0, 570.0); //vista ortogonal

}

void cubo (int x, int y,int t,int l){

double a=.8,b=.6;

glColor3f(0.0 , 0.0 , 0.0);

glBegin(GL_QUADS);

glVertex2f(x,y);

glVertex2f(x+t,y);

glVertex2f(x+t,y+t);

glVertex2f(x,y+t);

glColor3f(0.0 , 0.0 , 0.0);

36

Page 37: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2f(x,y+t);

glVertex2f(x+t,y+t);

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+(t*a),y+t+(t*b));

glColor3f(0.0 , 0.0 , 0.0);

glVertex2f(x+t,y+t);

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+t+(t*a),y+(t*b));

glVertex2f(x+t,y);

glEnd();

glColor3f(1.0 , 0.0 , 0.0);

glLineWidth(.8);

glBegin(GL_LINES);

glVertex2f(x,y);

glVertex2f(x+t,y);

glVertex2f(x+t,y);

glVertex2f(x+t,y+t);

glVertex2f(x+t,y+t);

glVertex2f(x,y+t);

glVertex2f(x,y);

glVertex2f(x,y+t);

glVertex2f(x+t,y+t);

glVertex2f(x+t,y+t);

glVertex2f(x+t+(t*a),y+t+(t*b));

37

Page 38: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+(t*a),y+t+(t*b));

glVertex2f(x,y+t);

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+(t*a),y+t+(t*b));

glVertex2f(x+t,y+t);

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+t+(t*a),y+t+(t*b));

glVertex2f(x+t+(t*a),y+(t*b));

glVertex2f(x+t+(t*a),y+(t*b));

glVertex2f(x+t,y);

glVertex2f(x+t,y+t);

glEnd();

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(1.0 , 0.0 , 0.0);

//columna izquierda atras

for(int i=0;i<=10;i++){

cubo(260,220+20*i,20,5);

}

//abajo atras

for(int j=0;j<=9;j++){

38

Page 39: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

cubo(280+20*j,220,20,5);

}

//arriba de atras

for(int j=0;j<=10;j++){

cubo(260+20*j,420,20,5);

}

//columna derecha atras

for(int i=0;i<=10;i++){

cubo(480,220+20*i,20,5);

}

//los de enfrente

//diagonales izquierca

for(int k=0;k<=8;k++){

cubo(245-20*k*.8,407-20*k*.6,20,5);

cubo(245-20*k*.8,207-20*k*.6,20,5);

}

//columna izquierda frente

for(int i=0;i<=10;i++){

cubo(100,100+20*i,20,5);

}

//abajo frente

for(int j=0;j<=10;j++){

cubo(120+20*j,100,20,5);

//arriba frente

39

Page 40: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

cubo(120+20*j,300,20,5);

}

//diagonales derecha

for(int k=0;k<=8;k++){

cubo(466-20*k*.8,408-20*k*.6,20,5);

cubo(466-20*k*.8,208-20*k*.6,20,5);

}

//columna derecha frente

for(int i=0;i<=10;i++){

cubo(320,100+20*i,20,5);

}

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(100,100); //posicion inicial de la ventana

glutCreateWindow("Ventana"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

40

Page 41: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

Muñeco con formas

//muñeco

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

void inicializa(void)

41

Page 42: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

{

glClearColor(1.0,1.0,1.0,0.0); //color de fondo

glMatrixMode(GL_PROJECTION); //Modo de proyeccion

glLoadIdentity(); //Establece los parametros de proyeccion

gluOrtho2D(0.0, 500.0, 0.0, 500.0); //vista ortogonal

}

void circuloc(int x, int y, int t, int radio)

{

int angulo=0;

glPointSize(t);

glBegin(GL_POINTS);

//glColor3f (1.0, 0.0, 1.0);

glVertex2f(x,y);

//glColor3f(0,0.0,0.0);

for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

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

{

int angulo=0;

glBegin(GL_TRIANGLE_FAN);

// glColor3f (1.0, 0.0, 1.0);

42

Page 43: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2f(x,y);

for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.8,0.5,0.4); //borra pantalla

circulo(225,400,80);

glColor3f(0.0,0.0,0.0);

circulo(200,440,7);

glColor3f(0.0,0.0,0.0);

circulo(240,440,7);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

glBegin(GL_TRIANGLES);

glVertex2i(260,469);

glVertex2i(250,499);

glVertex2i(240,480);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

43

Page 44: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glBegin(GL_TRIANGLES);

glVertex2i(240,480);

glVertex2i(230,500);

glVertex2i(220,480);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

glBegin(GL_TRIANGLES);

glVertex2i(220,480);

glVertex2i(200,500);

glVertex2i(180,465);

glEnd();

glBegin(GL_LINES);

glVertex2i(220,480);

glEnd();

glBegin(GL_POLYGON);

glColor3f(0.8,0.1,0.1);

glVertex2i(160,160);

glVertex2i(300,160);

glVertex2i(300,320);

glVertex2i(260,320);

glVertex2i(225,280);

glVertex2i(200,320);

glVertex2i(160,320);

glEnd();

44

Page 45: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glBegin(GL_POLYGON);

glVertex2i(160,320);

glVertex2i(160,280);

glVertex2i(120,200);

glVertex2i(80,200);

glEnd();

glBegin(GL_POLYGON);

glVertex2i(300,320);

glVertex2i(300,280);

glVertex2i(340,200);

glVertex2i(380,200);

glEnd();

//di

glColor3f(1.0 , 1.0 , 0.0);

glBegin(GL_POLYGON);

glVertex2i(160,140);

glVertex2i(160,160);

glVertex2i(300,160);

glVertex2i(300,140);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

glBegin(GL_POLYGON);

glVertex2i(220,140);

glVertex2i(220,160);

45

Page 46: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(240,160);

glVertex2i(240,140);

glEnd();

glColor3f(0.0 , 0.2 , 0.6);

glBegin(GL_POLYGON);

glVertex2i(160,140);

glVertex2i(100,40);

glVertex2i(160,20);

glVertex2i(225,140);

glEnd();

glColor3f(0.0 , 0.2 , 0.6);

glBegin(GL_POLYGON);

glVertex2i(225,140);

glVertex2i(280,20);

glVertex2i(340,40);

glVertex2i(300,140);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

glBegin(GL_TRIANGLES);

glVertex2i(275,20);

glVertex2i(380,10);

glVertex2i(340,40);

glEnd();

glColor3f(0.0 , 0.0 , 0.0);

46

Page 47: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glBegin(GL_TRIANGLES);

glVertex2i(160,20);

glVertex2i(100,40);

glVertex2i(50,20);

glEnd();

glFlush(); //forza dibujo

}

int main (int argc, char** argv) //metodo main

{

glutInit(&argc, argv); //incializa GLUT

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de visualización

glutInitWindowSize(500,500); //tamaño de la ventana

glutInitWindowPosition(100,100); //posicion inicial de la ventana

glutCreateWindow("Ventana"); //nombre de la ventana

inicializa();

glutDisplayFunc(dibuja); //Envia los graficos a la ventana de visualización

glutMainLoop(); //muestra todo y espera

return 0; //retorna un valor de cero

}

47

Page 48: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Animación circulo

#include <unistd.h>

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

int x=1, y=1, z=1, a=1;

void inicializa(void)

{

glClearColor(0.0,0.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 900.0, 0.0, 900.0);// el ancho y largo de nuestra pantalla

48

Page 49: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

}

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

{

int angulo=0;

glBegin(GL_TRIANGLE_FAN); glColor3f (0.5, 0.5, 0.5);

glVertex2f(x,y);

glColor3f(0,0.0,0.0);

for (angulo=0;angulo<=360; angulo+=6){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

if(x>=1 && x<800){

circulo(5+1*x,900,15);

glFlush();

x++;

}

if(y>=1 && y<800 && x==800)

{

circulo(805,900-y,15);

glFlush();

y++;

49

Page 50: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

}

if(z>=1 && z<800 && x==800 && y==800){

circulo(805-z,100,15);

glFlush();

z++;

}

if(a>=1 && a<800 && x==800 && y==800 && z==800){

circulo(5,100+a,15);

glFlush();

a++;

if(a==800){x=1; y=1; z=1;}

}

glutSwapBuffers();

}

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);

glutInitWindowSize(1000,1000);

glutInitWindowPosition(10,10);

glutCreateWindow("Movimiento de bolita");

inicializa();

glutDisplayFunc(dibuja);

glutIdleFunc(dibuja);

50

Page 51: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutMainLoop();

return 0;

}

Animación Sistema solar

#include <unistd.h>

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

int rad=100;

double ang=0;

double a=0;

double b=0;

double c=0;

double d=0;

51

Page 52: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

double e=0;

double f=0;

double g=0;

void inicializa(void)

{

glClearColor(0.0,0.0,0.0,0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0);// el ancho y largo de nuestra pantalla

}

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

{

int angulo=0;

glBegin(GL_TRIANGLE_FAN);

glVertex2f(x,y);

for (angulo=0;angulo<=360; angulo++){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

void circuloc(int x, int y, int t, int radio)

{

int angulo=0;

glPointSize(t);

glBegin(GL_POINTS);

52

Page 53: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

//glColor3f (1.0, 0.0, 1.0);

glVertex2f(x,y);

//glColor3f(0,0.0,0.0);

for (angulo=0;angulo<=100; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto

glColor3f(1.0,1.0,1.0);

circuloc(500,500,1,100);

circuloc(500,500,1,200);

circuloc(500,500,1,300);

circuloc(500,500,1,400);

circuloc(500,500,1,55);

circuloc(500,500,1,150);

circuloc(500,500,1,250);

circuloc(500,500,1,350);

glColor3f(1.0,1.0,1.0);

circulo( 500+ sin(ang) * rad,500 - cos(ang) * rad,10); //funcion circulo

glColor3f(1.0,0.0,0.0);

circulo( 500+ sin(a) * 55,500 + cos(a) * 55,10);

53

Page 54: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glColor3f(0.0,0.0,1.0);

circulo( 500+ sin(b) * 150,500 - cos(b) * 150,13);

glColor3f(0.0,1.0,0.0);

circulo( 500+ sin(c) * 200,500 + cos(c) * 200,10);

glColor3f(0.0,1.0,0.9);

circulo( 500+ sin(d) * 250,500 - cos(d) * 250,20);

glColor3f(0.0,1.0,1.0);

circulo( 500+ sin(g) * 300,500 + cos(g) * 300,10);

glColor3f(0.0,1.0,0.5);

circulo( 500+ sin(e) * 350,500 - cos(e) * 350,20);

glColor3f(1.0,1.0,0.0);

circulo( 500+ sin(f) * 400,500 + cos(f) * 400,10);

ang=ang+0.06;

a=a+0.07;

b=b+0.01;

c=c+0.03;

d=d+0.05;

e=e+0.04;

f=f+0.05;

g=g+0.06; //velocidad entre mas grande mas rapido y entre menos mas lento

for(int j=1;j<=10000000;j++){}//pausa

if(ang==360){ang=0;}

// se repite idefinidamente

54

Page 55: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glColor3f(1.0,0.9,0.0);

circulo(500,500,35);//sol

glFlush(); //forzar dibujado

glutSwapBuffers(); //y esto

}

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);//esto tambien

glutInitWindowSize(1000,1000);

glutInitWindowPosition(10,10);

glutCreateWindow("Sistema Solar");

inicializa();

glutDisplayFunc(dibuja);

glutIdleFunc(dibuja);//esto es lo que cambia

glutMainLoop();

return 0;

}

55

Page 56: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Movimiento en Ocho

#include <unistd.h>

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

int x=1, x2=1,y=1;

double a=6.15, b=6.15;

void inicializa(void){

glClearColor(0.0,0.0,0.0,0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 1000.0, 0.0, 1000.0);// el ancho y largo de nuestra pantalla

}

void circulo(int x, int y, int radio){

int angulo=0;

glBegin(GL_TRIANGLE_FAN);

56

Page 57: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2f(x,y);

for (angulo=0;angulo<=360; angulo+=6){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();}

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3f (1.0,0.9, 0.0);

circulo(500,300,250);

glColor3f (0.0,0.0, 0.0);

circulo(500,300,150);

glColor3f (1.0,0.9, 0.0);

circulo(500,700,250);

glColor3f (0.0,0.0, 0.0);

circulo(500,700,150);//ocho

//la otra bolita

if(a>=6.15 && a<=12.41){

circulo(500 - sin (a)*200,700 - cos(a)*200,40);

a=a+ 0.031;

}

else{

circulo(500 - sin (b) *200,300 - cos(b)*-200,40);

b=b + 0.1;

if(b>12.4){a=6.15;b=6.15;}

57

Page 58: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

for(int j=0; j<=10000000; j++) {}

}

// se repite idefinidamente

glFlush(); //forzar dibujado

glutSwapBuffers(); //y esto

}

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);//esto tambien

glutInitWindowSize(1000,1000);

glutInitWindowPosition(10,10);

glutCreateWindow("Movimiento en 8");

inicializa();

glutDisplayFunc(dibuja);

glutIdleFunc(dibuja);//esto es lo que cambia

glutMainLoop();

return 0;

}

58

Page 59: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Semáforo

Nombre 3D

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glut.h>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

GLfloat anguloEsfera = 0.0f;

GLfloat girax=0,giray=0,zoom=0,e,f;

GLboolean malla=GL_FALSE, ejes=GL_TRUE;

void mover(void){

glTranslated(0,0,zoom);

glRotated(girax,1.0,0.0,0.0);

glRotated(giray,0.0,1.0,0.0);

}

59

Page 60: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

void creaMalla(void){

int i, long_eje=10;

glColor3f(1.0,1.0,0.0);

glBegin(GL_LINES);

for(i=-long_eje;i<=long_eje;i++){

glVertex3f(i,-long_eje,0);

glVertex3f(i,long_eje,0);

glVertex3f(-long_eje,i,0);

glVertex3f(long_eje,i,0);

glVertex3f(i,0,-long_eje);

glVertex3f(i,0,long_eje);

glVertex3f(-long_eje,0,i);

glVertex3f(long_eje,0,i);

}

glEnd();

}

void creaEjes(void){

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINES);

glColor3f(0.0,0.0,1.0);

glVertex3f(-11.0,0.0,0.0);

glVertex3f(11.0,0.0,0.0);

glColor3f(1.0,0.0,0.0);

60

Page 61: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex3f(0.0,-11.0,0.0);

glVertex3f(0.0,11.0,0.0);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.0,0.0,-11.0);

glVertex3f(0.0,0.0,11.0);

glEnd();

glBegin(GL_TRIANGLES);

glColor3f(0.0,0.0,1.0);

glVertex3f(11.0,0.0,0.0);

glVertex3f(10.5,0.0,-.50);

glVertex3f(10.5,0.0,.50);

glColor3f(1.0,0.0,0.0);

glVertex3f(0.0,11.0,0.0);

glVertex3f(-.50,10.5,0.0);

glVertex3f(.50,10.5,0.0);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.0,0.0,11.0);

glVertex3f(-.50,0.0,10.5);

glVertex3f(.50,0.0,10.5);

//puntas otras

glColor3f(0.0,0.0,1.0);

glVertex3f(-11.0,0.0,0.0);

glVertex3f(-10.5,0.0,.50);

glVertex3f(-10.5,0.0,-.50);

61

Page 62: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glColor3f(1.0,0.0,0.0);

glVertex3f(0.0,-11.0,0.0);

glVertex3f(.50,-10.5,0.0);

glVertex3f(-.50,-10.5,0.0);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.0,0.0,-11.0);

glVertex3f(.50,0.0,-10.5);

glVertex3f(-.50,0.0,-10.5);

glEnd();

}

void init ( void )

{

glClearColor(1.0,1.0,1.0,0.0) ;// Definimos el negro como color de fondo

glEnable(GL_DEPTH_TEST); // Activamos el z-Buffer

glEnable(GL_LIGHTING); // Activamos la iluminación

glEnable(GL_LIGHT0); // Activamos la luz 0

glMatrixMode(GL_PROJECTION); // set the view volume shape

glLoadIdentity(); glOrtho(-15,15,-15,15,-30,30);

glMatrixMode(GL_MODELVIEW); // position and aim the camera

glLoadIdentity();

gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0);

62

Page 63: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

}

void dibuja( void )

{

glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glEnable(GL_DEPTH_TEST); // Activamos el z-Buffer

glEnable(GL_LIGHTING); // Activamos la iluminación

glEnable(GL_LIGHT0); // Activamos la luz 0

//glShadeModel(GL_FLAT);

glShadeModel (GL_SMOOTH);

// Cargamos la matriz identidad para reiniciar las transformaciones

/* float angulo;

int i;

glLineWidth(20);

glBegin(GL_LINES);

glColor3d(1,1,1);

for (i=0; i<360; i+=10) {

angulo = (GLfloat)i*3.14159f/180.0f; // grados a radianes

glColor3d(1,1,1);

glVertex3i(0,0,-3);

glVertex3f(0+cos(angulo)*45, 0+sin(angulo)*45,0);

}

glEnd();*/

// Colocamos una luz

63

Page 64: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glLightfv(GL_LIGHT0,GL_DIFFUSE,(GLfloat []){1.0f,1.0f,1.0f,0.0f}); // Color de la luz

glLightfv(GL_LIGHT0,GL_AMBIENT,(GLfloat []){1.0, 1.0, 1.0, 4.0}); // Luz ambiente

glLightfv(GL_LIGHT0,GL_POSITION,(GLfloat []){0.0f,12.0f,5.0f,0.0f}); // Posición de la luz

glLightfv(GL_LIGHT0,GL_EMISSION,(GLfloat []){0.5,0.5,0.5,1.0});

//glShadeModel (GL_SMOOTH);

// esfera

glPushMatrix();

mover();

if(malla) creaMalla();

if(ejes) creaEjes();

//glRotatef(anguloEsfera, 1.0f, 1.0f,0.0f);

glColor3f(1.0,1.0,0.0);

//A

glTranslatef(-7.2,0.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-0.9, 0.0);

glutSolidCube(1);

glTranslatef(0.9,0.0, 0.0);

glutSolidCube(1);

glTranslatef(0.9,0.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-0.3, 0.0);

glutSolidCube(1);

64

Page 65: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glTranslatef(0.0,1.2, 0.0);

glutSolidCube(1);

glTranslatef(-0.9,0.2, 0.0);

glutSolidCube(1);

//l

glTranslatef(2.3,-1.6, 0.0);

glutSolidCube(1);

glTranslatef(0.0,0.9, 0.0);

glutSolidCube(1);

glTranslatef(0.0,0.9, 0.0);

glutSolidCube(1);

glTranslatef(0.0,0.9, 0.0);

glutSolidCube(1);

//i

glTranslatef(1.4,-2.7, 0.0);

glutSolidCube(1);

glTranslatef(0.0,0.9, 0.0);

glutSolidCube(1);

glTranslatef(0.0,1.2, 0.0);

glutSolidCube(1);

//n

glTranslatef(1.4,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.9,0.0, 0.0);

65

Page 66: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glutSolidCube(1);

glTranslatef(0.9,0.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-0.9, 0.0);

glutSolidCube(1);

glTranslatef(-1.6,0.0, 0.0);

glutSolidCube(1);

// AQUI PONES TU NOMBRE

//AQUI

//AQUI

//AQUI//AQUI

//AQUI//AQUI//AQUI

//AQUI

glPopMatrix ();

glFlush();

glutSwapBuffers ();

//anguloEsfera+=2.0f;

}

void reshape(int w, int h){

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(-15,15,-15,15,-30,30);

glMatrixMode(GL_MODELVIEW);

66

Page 67: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glLoadIdentity();

glClear(GL_DEPTH_TEST);

}

void activo(int x,int y){

// x= e;

//y= f;

girax=y;

giray=700-x;

glutPostRedisplay();

}

void teclado(unsigned char key, int x, int y){

switch(key){

case 27:

exit(0);

case '+':

zoom++;

break;

case '-':

zoom--;

break;

case 'p':

glMatrixMode(GL_PROJECTION);

67

Page 68: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glLoadIdentity();

gluPerspective(45,1,10,100);

zoom=-40;

break;

case 'o':

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(-15,15,-15,15,-30,30);

zoom=0;

break;

case 'm':

malla= !malla;

break;

case 'e':

ejes= !ejes;

default: break;

}

glutPostRedisplay();

}

void flechas(int key, int x, int y){

switch(key){

case GLUT_KEY_LEFT:

giray-=15;

68

Page 69: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

break;

case GLUT_KEY_RIGHT:

giray+=15;

break;

case GLUT_KEY_UP:

girax-=15;

break;

case GLUT_KEY_DOWN:

girax+=15;

break;

default: break;

}

glutPostRedisplay();

}

int main ( int argc, char** argv )

{

glutInit (&argc, argv);

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutInitWindowSize (600,600);

glutInitWindowPosition (100,100);

glutCreateWindow ("Objetos 3D");

//init ( );

glutDisplayFunc (dibuja);

69

Page 70: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

//glutIdleFunc(dibuja);

glutReshapeFunc ( reshape );

glutKeyboardFunc(teclado);

glutSpecialFunc(flechas);

glutMotionFunc(activo);

glutMainLoop( );

return 0;

}

70

Page 71: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

Semáforo.

SEMAFORO

En esta práctica realizaremos un semáforo en el cual los colores se cambien según la ubicación de dicho semáforo, para ello utilizaremos, rectángulos y círculos así como se muestra a continuación:

Código:

#include <unistd.h>

#include <GL/glut.h>

#include <GL/gl.h>

#include <math.h>

int rad=100;

double ang=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0;

void inicializa(void)

{

glClearColor(0.2,0.6,0.8,1.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0, 500.0, 0.0, 500.0);// el ancho y largo de nuestra pantalla

}

void circuloc(int x, int y, int t, int radio)

{

int angulo=0;

glPointSize(t);

71

Page 72: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glBegin(GL_POINTS);

//glColor3f (1.0, 0.0, 1.0);

glVertex2f(x,y);

//glColor3f(0,0.0,0.0);

for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

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

{

int angulo=0;

glBegin(GL_TRIANGLE_FAN);

glVertex2f(x,y);

for (angulo=0;angulo<=360; angulo++){ glVertex2f(x + sin(angulo) * radio, y + cos(angulo) * radio);}

glEnd();

}

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto

glBegin(GL_QUADS);//Cuadros fondo semaforo

glColor3f(0.2 , 0.6 , 0.);

glVertex2i(170,437);

glVertex2i(320,437);

glVertex2i(320,182);

72

Page 73: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

glVertex2i(170,182);

glVertex2i(229,183);

glVertex2i(278,183);

glVertex2i(278,3);

glVertex2i(229,3);

glEnd();

glColor3f(0.0,0.0,0.0);//Luces Roja

circulo(247,226,34);

glColor3f(0.0,0.0,0.0);//Luces Amarrilla

circulo(247,302,34);

glColor3f(0.0,0.0,0.0);//Luces Verde

circulo(247,381,34);

a=a+1; //velocidad entre mas grande mas rapido y entre menos mas lento

for(int j=1;j<=10000000;j++){}//pausa

if(a>1 && a<20){

glColor3f(1.0,0.0,0.0);//Luces Roja

circulo(247,381,34);

}// se repite idefinidamente

73

Page 74: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

if(a>20 && a<40){

glColor3f(0.0,1.0,0.0);//Luces Roja

circulo(247,226,34);

}// se repite idefinidamente

if(a>40 && a<50){

glColor3f(1.0,1.0,0.0);//Luces Roja

circulo(247,302,34);

}// se repite idefinidamente

if(a>55 && a<50){

glColor3f(1.0,1.0,0.0);//Luces Roja

circulo(247,302,34);

}// se repite idefinidamente

if(a>60 && a<55){

glColor3f(1.0,1.0,0.0);//Luces Roja

circulo(247,302,34);

}// se repite idefinidamente

if(a>60){a=0;}

glFlush(); //forzar dibujado

glutSwapBuffers(); //y esto

}

74

Page 75: Manual de Practicas de Open GL con Dev C++

Colegio de Estudios Científicos Y Tecnológicos del Estado de México

int main (int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);//esto tambien

glutInitWindowSize(500,500);

glutInitWindowPosition(10,10);

glutCreateWindow("Ventana");

inicializa();

glutDisplayFunc(dibuja);

glutIdleFunc(dibuja);//esto es lo que cambia

glutMainLoop();

return 0;

}

75