renee opengl karla

Post on 29-Jun-2015

692 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

este manual podemos encontrar codigos de diferentes practicas de opengl

TRANSCRIPT

1

Colegio de Estudios Científicos y Tecnológicos

del Estado de México.P l a n t e l: Tecámac

Carrera: Técnico en Informática

Asignatura: Utilización de Software de Diseño para el Manejo de Gráficos.

Docente: Ing. René Domínguez Escalona.

Alumnos:

Bernal Sixto Karla Gabriela Campos Centeno Jorge Alejandro

Título: ”MANUAL DE PRACTICAS DE

OpenGl ”

2

Ecatepec de Morelos, Estado de México, a jueves 01 de marzo del 2012.

INTRODUCCIÓN.

OpenGl

(Open Graphics Library) es una especificación estándar que define a una APL (Application Programming Interface) multilenguaje para producir aplicaciones que produzcan gráficos en 2D y 3D. La interfaz consiste en más de 250 funciones diferentes que pueden usarse para dibujar escenas tridimensionales complejas a partir de primitivas geométricas simples, tales como puntos, líneas y triángulos.

Así mismo cuenta con varias paqueterias las cuales ayudan a el uso de este software.

¿Cuáles son las librerías de OpenGl y sus características?

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 tambien una librería auxiliar:

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 adicionales 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 defecto de que solo sirve para Windows, mientras que GLUT sirve para cualquier plataforma.

3

INDICE

Portada…………………………………………………………………….1 Introducción………………………………………………………………2 Indice………………………………………………………………………3

Practicas

Tablero De Ajedrez………………………………………………………4

Estrella………………………………………………………………………5 Cubo Con Lineas…………………………………………………………6 Cubo Delineado………………………………………………………….7 Muñeco Con triangulos…………………………………………………

8 Casita………………………………………………………………………9 Oso………………………………………………………………………….10 Cubo Con

Cubitos……………………………………………………….11 Muñeco Con Formas……………………………………………………

12 Animación a Un

Circulo………………………………………………..13 Animaciòn del Sistema

Solar………………………………………….14 Movimiento en

ocho…………………………………………………….15 Semaforo…………………………………………………………………..1

6 Cubo en

3D………………………………………………………………..17 Nombre en

3D…………………………………………………………….18 Practica Extra: Piramide………………………………….

……………..19

4

Practica 1.

Tablero De Ajedrez.

DESCRIPCIÓN.

Con la primitiva de PUNTO en OpenGL (POINTS) crear una simulación de un tablero de ajedrez de 8 x 8 cuadros uno blanco y uno negro.

Borrador

CODIGO

void dibuja(void) //funcion dibuja

{

5

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(0.0 , 0.0 , 0.0);

glPointSize(80);

glBegin(GL_POINTS);

glVertex2i(100,100);

glVertex2i(320,100);

glVertex2i(540,100);

glVertex2i(760,100);

glVertex2i(210,210);

glVertex2i(430,210);

glVertex2i(650,210);

glVertex2i(100,320);

glVertex2i(320,320);

glVertex2i(540,320);

glVertex2i(760,320);

glVertex2i(210,430);

glVertex2i(430,430);

glVertex2i(650,430);

glVertex2i(100,540);

glVertex2i(320,540);

glVertex2i(540,540);

glVertex2i(760,540);

glVertex2i(210,650);

glVertex2i(430,650);

glVertex2i(650,650);

glVertex2i(100,760);

glVertex2i(320,760);

glVertex2i(540,760);

glVertex2i(760,760);

glVertex2i(210,870);

glVertex2i(430,870);

glVertex2i(650,870);

glEnd();

glColor3f(1.0 , 1.0 , 1.0);

6

glPointSize(80);

glBegin(GL_POINTS);

glVertex2i(210,100);

glVertex2i(430,100);

glVertex2i(650,100);

glVertex2i(100,210);

glVertex2i(320,210);

glVertex2i(540,210);

glVertex2i(760,210);

glVertex2i(210,320);

glVertex2i(430,320);

glVertex2i(650,320);

glVertex2i(100,430);

glVertex2i(320,430);

glVertex2i(540,430);

glVertex2i(760,430);

glVertex2i(210,540);

glVertex2i(430,540);

glVertex2i(650,540);

glVertex2i(100,650);

glVertex2i(320,650);

glVertex2i(540,650);

glVertex2i(760,650);

glVertex2i(210,760);

glVertex2i(430,760);

glVertex2i(650,760);

glVertex2i(100,870);

glVertex2i(320,870);

glVertex2i(540,870);

glVertex2i(760,870);

glEnd();

glFlush(); //forza dibujo

}

7

SALIDA

8

Practica 2.

Estrella.

DESCRIPCIÓN.

Con la primitiva de LINEA en OpenGL (LINES) crear una estrella del tamaño cuales quiera.

BORRADOR

CODIGO

void dibuja(void) //funcion dibuja

{

9

glClear(GL_COLOR_BUFFER_BIT);

glLineWidth(3);

glColor3f(101 ,333 ,210 );

glBegin(GL_LINES);

glVertex2i(152,0);

glVertex2i(394,750);

glVertex2i(394,750);

glVertex2i(638,0);

glVertex2i(638,0);

glVertex2i(0,463);

glVertex2i(0,463);

glVertex2i(789,463);

glVertex2i(789,463);

glVertex2i(152,0);

glEnd();

glFlush(); //forza dibujo

}

SALIDA

10

Practica 3.

Cubo con Lineas.

DESCRIPCIÓN.

Con la primitiva de LINEA en OpenGL (LINES) crear una cubo del tamaño cuales quiera(obvio sin relleno).

BORRADOR

11

CODIGO

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(0.0 , 0.0 , 0.0);

glLineWidth(4);

glBegin(GL_LINES);

glVertex2i(300,300);

glVertex2i(400,300);

glVertex2i(370,370);

glVertex2i(470,370);

glVertex2i(300,300);

glVertex2i(370,370);

glVertex2i(400,300);

glVertex2i(470,370);

12

glVertex2i(370,370);

glVertex2i(370,470);

glVertex2i(470,370);

glVertex2i(470,470);

glVertex2i(370,470);

glVertex2i(470,470);

glVertex2i(300,300);

glVertex2i(300,400);

glVertex2i(300,400);

glVertex2i(370,470);

glVertex2i(470,470);

glVertex2i(400,400);

glVertex2i(400,400);

glVertex2i(300,400);

glVertex2i(400,400);

glVertex2i(400,300);

glEnd();

glFlush(); //forza dibujo

}

SALIDA

13

Practica 4.

Cubo Delineado.

DESCRIPCIÓN.

Con la primitiva de CUADRO en OpenGL (QUADS) crear una cubo del tamaño cuales quiera con diferentes colores de relleno. Y así mismo

14

remarcar todas las orillas de cada cuadro que conforman el cubo con las primitiva de LINES en OpenGL (LINES), para así lograr la simulacion de un cubo delineado.

BORRADOR

CODIGO

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glBegin(GL_QUADS);

//atras

glColor3f(0.0 , 0.6 , 0.0);

glVertex2d(100,150);

glVertex2d(300,150);

glVertex2d(300,350);

glVertex2d(100,350);

//abajo

15

glColor3f(0.7 , 0.8 , 0.7);

glVertex2d(200,100);

glVertex2d(400,100);

glVertex2d(300,150);

glVertex2d(100,150);

//izquierda

glColor3f(0. , 0.4 , 1.0);

glVertex2d(100,150);

glVertex2d(200,100);

glVertex2d(200,300);

glVertex2d(100,350);

//derecho

glColor3f(0.0 , 0.8 , 0.0);

glVertex2d(300,150);

glVertex2d(400,100);

glVertex2d(400,300);

glVertex2d(300,350);

//arriba

glColor3f(5.5 , 0.0 , 0.0);

glVertex2d(200,300);

glVertex2d(400,300);

glVertex2d(300,350);

glVertex2d(100,350);

//frente

glColor3f(0.2 , 0.9 , 0.0);

glVertex2d(200,100);

16

glVertex2d(400,100);

glVertex2d(400,300);

glVertex2d(200,300);

glEnd();

glFlush(); //forza dibujo

}

SALIDA

Practica 5.

Muñeco con Triangulos.

DESCRIPCIÓN.

17

Con las primitivas de TRIANGULO y CUADRO en OpenGL (TRIANGLE && QUADS) crear un pequeño hombre.

BORRADOR

CODIGO

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glBegin(GL_QUADS);

glColor3f(0.3 , 0.7 , 0.9);

glVertex2i(0,500);

glVertex2i(500,500);

glVertex2i(500,114);

glVertex2i(0,114);

glColor3f(0.4 , 0.7 , 0.2);

18

glVertex2i(0,115);

glVertex2i(0,0);

glVertex2i(500,0);

glVertex2i(500,115);

glEnd();

glColor3f(1.0 , 0.0 , 0.0);

glLineWidth(4);

glBegin(GL_TRIANGLES);

glVertex2i(184,405);

glVertex2i(314,405);

glVertex2i(250,468);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(215,405);

glVertex2i(287,405);

glVertex2i(250,335);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(239,335);

glVertex2i(261,335);

glVertex2i(250,314);

glEnd();

glBegin(GL_QUADS);

glColor3f(0.0 , 1.0 , 0.0);

glVertex2i(208,335);

glVertex2i(292,335);

glVertex2i(293,241);

glVertex2i(208,241);

glEnd();

glBegin(GL_TRIANGLES);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(239,335);

19

glVertex2i(261,335);

glVertex2i(250,314);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(208,335);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(170,241);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(160,279);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(160,279);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(151,298);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(142,260);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(329,240);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(339,279);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(293,335);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(348,297);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(357,259);

glVertex2i(339,279);

glColor3f(1.0 , 0.9 , 0.0);

glVertex2i(333,326);

glVertex2i(391,326);

20

glVertex2i(362,247);

glColor3f(0.3 , 0.7 , 0.9);

glVertex2i(362,250);

glVertex2i(348,326);

glVertex2i(341,322);

glColor3f(0.3 , 0.7 , 0.9);

glVertex2i(377,326);

glVertex2i(384,322);

glVertex2i(364,250);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(239,241);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(239,96);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(214,210);

glColor3f(1.0 , 0.0 , 0.0);

glVertex2i(238,95);

glVertex2i(195,96);

glVertex2i(213,117);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(256,241);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(256,210);

glColor3f(1.0 , 1.0 , 1.0);

glVertex2i(299,210);

glColor3f(0.9 , 0.7 , 0.5);

glVertex2i(299,210);

glVertex2i(282,189);

21

glVertex2i(290,158);

glColor3f(1.0 , 0.0 , 0.0);

glVertex2i(292,158);

glVertex2i(316,178);

glVertex2i(333,158);

glColor3f(0.0 , 0.0 , 0.0);

glVertex2i(308,158);

glVertex2i(308,143);

glVertex2i(293,143);

glVertex2i(322,158);

glVertex2i(322,143);

glVertex2i(337,143);

glVertex2i(337,128);

glVertex2i(322,128);

glVertex2i(322,113);

glVertex2i(308,128);

glVertex2i(308,113);

glVertex2i(293,128);

glColor3f(1.0 , 0.9 , 0.0);

glVertex2i(362,246);

glVertex2i(383,239);

glVertex2i(341,239);

glEnd();

glBegin(GL_QUADS);

glColor3f(0.0 , 0.0 , 0.0);

glVertex2i(308,128);

glVertex2i(322,128);

22

glVertex2i(322,113);

glVertex2i(308,113);

glVertex2i(308,128);

glColor3f(0.0 , 0.0 , 0.0);

glVertex2i(308,143);

glVertex2i(322,143);

glVertex2i(322,128);

glVertex2i(322,143);

glVertex2i(322,128);

glVertex2i(337,128);

glVertex2i(337,143);

glVertex2i(322,143);

glVertex2i(322,157);

glVertex2i(308,157);

glVertex2i(308,143);

glVertex2i(308,143);

glVertex2i(308,128);

glVertex2i(293,128);

glVertex2i(293,143);

glEnd();

glFlush(); //forza dibujo

}

SALIDA

23

Practica 6.

Casita.

DESCRIPCIÓN.

24

Con las primitivas de TRIANGULO, CUADRO, LINEA y PUNTO en OpenGL (TRIANGLE, QUADS, LINES && POINTS) crear una copia de las siguiente imagen:

CODIGO

void dibuja(void)

{

int i,j=0;

/* borra la pantalla */

glClear(GL_COLOR_BUFFER_BIT);

// Cerca

for(i=0;i<50;i++){

glBegin(GL_POLYGON);

glColor3f (1.0, 0.3, 0.0);

glVertex2f(0+20*i,292);

glVertex2f(5+20*i,300);

glVertex2f(10+20*i,292);

glVertex2f(10+20*i,240);

glVertex2f(0+20*i,240);

glEnd();

}

glBegin(GL_QUADS);

glVertex2i(0,289);

25

glVertex2i(1000,289);

glVertex2i(1000,280);

glVertex2i(0,280);

//pasto

glColor3f (0.4, 0.8, 0.2);

glVertex2i(0,240);

glVertex2i(1000,240);

glVertex2i(1000,120);

glVertex2i(0,120);

//banqueta

glColor3f (0.6, 0.6, 0.6);

glVertex2i(0,120);

glVertex2i(1000,120);

glVertex2i(1000,90);

glVertex2i(0,90);

glColor3f (1.0, 1.0, 0.0);

glVertex2i(0,90);

glVertex2i(1000,90);

glVertex2i(1000,82);

glVertex2i(0,82);

//calle

glColor3f (0.3, 0.3, 0.3);

glVertex2i(0,82);

26

glVertex2i(1000,82);

glVertex2i(1000,0);

glVertex2i(0,0);

//piedras

glColor3f (0.6, 0.6, 0.6);

glVertex2i(105,180);

glVertex2i(135,180);

glVertex2i(135,165);

glVertex2i(105,165);

glVertex2i(165,180);

glVertex2i(195,180);

glVertex2i(195,165);

glVertex2i(165,165);

glVertex2i(105,150);

glVertex2i(135,150);

glVertex2i(135,135);

glVertex2i(105,135);

glVertex2i(165,150);

glVertex2i(195,150);

glVertex2i(195,135);

glVertex2i(165,135);

27

//entrada

glVertex2i(345,195);

glVertex2i(405,195);

glVertex2i(405,120);

glVertex2i(345,120);

// Casa

glColor3f (1.0, 0.8, 0.0);

glVertex2i(210,450);

glVertex2i(540,450);

glVertex2i(540,195);

glVertex2i(210,195);

// Techo casa

glColor3f (0.9, 0.09, 0.0);

glVertex2i(210,495);

glVertex2i(540,495);

glVertex2i(585,450);

glVertex2i(165,450);

// Techo cochera

glVertex2i(75,345);

glVertex2i(210,345);

glVertex2i(210,315);

glVertex2i(60,315);

//Cortina

glColor3f (0.9, 0.9, 0.9);

28

glVertex2i(90,315);

glVertex2i(210,315);

glVertex2i(210,195);

glVertex2i(90,195);

//Puerta

glColor3f (1.0, 1.0, 1.0);

glVertex2i(345,300);

glVertex2i(405,300);

glVertex2i(405,195);

glVertex2i(345,195);

//Columnas

glColor3f (0.7, 0.5, 0.3);

glVertex2i(75,315);

glVertex2i(90,315);

glVertex2i(90,195);

glVertex2i(75,195);

glVertex2i(210,330);

glVertex2i(540,330);

glVertex2i(540,315);

glVertex2i(210,315);

29

glVertex2i(330,435);

glVertex2i(345,435);

glVertex2i(345,195);

glVertex2i(330,195);

glVertex2i(405,435);

glVertex2i(420,435);

glVertex2i(420,195);

glVertex2i(405,195);

//Ventanas i

glColor3f (0.7, 0.7, 1.0);

glVertex2i(240,435);

glVertex2i(300,435);

glVertex2i(300,375);

glVertex2i(240,375);

glVertex2i(240,300);

glVertex2i(300,300);

glVertex2i(300,240);

glVertex2i(240,240);

//Ventanas d

glVertex2i(450,435);

30

glVertex2i(510,435);

glVertex2i(510,375);

glVertex2i(450,375);

glVertex2i(450,300);

glVertex2i(510,300);

glVertex2i(510,240);

glVertex2i(450,240);

//Ventanas balcon

glVertex2i(345,435);

glVertex2i(405,435);

glVertex2i(405,330);

glVertex2i(345,330);

//Ventanas puerta

glVertex2i(360,285);

glVertex2i(390,285);

glVertex2i(390,210);

glVertex2i(360,210);

//Tallos

glColor3f (0.5, 0.3, 0.2);

glVertex2i(670,225);

glVertex2i(700,225);

glVertex2i(700,150);

31

glVertex2i(670,150);

glVertex2i(875,225);

glVertex2i(905,225);

glVertex2i(905,150);

glVertex2i(875,150);

glEnd();

glBegin(GL_TRIANGLES);

// Techo balcon

glColor3f (0.5, 0.3, 0.2);

glVertex2i(375,480);

glVertex2i(435,435);

glVertex2i(315,435);

glEnd();

//arboles

glLineWidth (4);

glBegin(GL_LINES);

glColor3f (0.0, 0.7, 0.0);

for(i=0;i<32;i++){

glVertex2i(680-3*i,540-10*j);

glVertex2i(690+3*i,540-10*j);

glVertex2i(685-3*i,535-10*j);

32

glVertex2i(695+3*i,535-10*j);

glVertex2i(885-3*i,540-10*j);

glVertex2i(895+3*i,540-10*j);

glVertex2i(890-3*i,535-10*j);

glVertex2i(900+3*i,535-10*j);

j=j+1;

}

glEnd();

//Linea Calle

glLineWidth (4);

glColor3f (0.0, 0.0, 0.0);

glBegin(GL_LINES);

for(i=0;i<50;i++){

glVertex2i(0+120*i,41);

glVertex2i(90+120*i,41);

}

//Barandal

glVertex2i(344,375);

glVertex2i(406,375);

for(i=0;i<7;i++){

glVertex2i(345+10*i,375);

33

glVertex2i(345+10*i,330);

}

//Divicion Ventana

glVertex2i(240,262);

glVertex2i(300,262);

glVertex2i(240,397);

glVertex2i(300,397);

glVertex2i(450,397);

glVertex2i(510,397);

glVertex2i(450,262);

glVertex2i(510,262);

glVertex2i(375,434);

glVertex2i(375,375);

glVertex2i(270,397);

glVertex2i(270,375);

glVertex2i(270,262);

glVertex2i(270,240);

glVertex2i(480,397);

glVertex2i(480,375);

glVertex2i(480,262);

glVertex2i(480,240);

glEnd();

34

//Contorno ventanas

glBegin(GL_LINE_LOOP);

glVertex2i(240,435);

glVertex2i(300,435);

glVertex2i(300,375);

glVertex2i(240,375);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex2i(240,300);

glVertex2i(300,300);

glVertex2i(300,240);

glVertex2i(240,240);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex2i(450,435);

glVertex2i(510,435);

glVertex2i(510,375);

glVertex2i(450,375);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex2i(450,300);

glVertex2i(510,300);

glVertex2i(510,240);

glVertex2i(450,240);

35

glEnd();

//Chapa

glPointSize(4);

glColor3f (0.0, 0.0, 0.0);

glBegin(GL_POINTS);

glVertex2i(352,247);

glVertex2i(352,245);

glEnd();

glFlush();

}

SALIDA

36

Practica 7.

Oso.

DESCRIPCIÓN.

Crendo una nueva instrucción en OpenGl con la que puedas dibujar CIRCULOS crea un oso cualesquiera.

BORRADOR

CODIGO

37

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

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.4,0.3,0.3); //borra pantalla

circulo(254,180,123);

circulo(248,319,84);

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

circulo(300,395,25);

circulo(183,393,25);

38

circulo(135,237,31);

circulo(371,233,31);

circulo(326,81,31);

circulo(176,87,31);

circulo(253,130,7);

glColor3f(1.0,1.0,1.0); //borra pantalla

circulo(267,331,15);

circulo(237,331,15);

glColor3f(1.0,0.0,0.0); //borra pantalla

circulo(252,295,7);

glColor3f(0.0,0.0,0.0); //borra pantalla

circulo(262,330,3);

circulo(245,329,3);

glEnd();

glFlush(); //forza dibujo

}

SALIDA

39Practica 8.

40

Cubo con Cubitos.

DESCRIPCIÓN.

Crea una nueva instrucción con la cual puedas multiplicar un dibujo que en este caso sea el CUBO DELIEADO que hicimos anteriormente y que se multiplique en forma de linea y acomodarlos para que nos forme otro cubo.

BORRADOR

CODIGO

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(1.0 , 0.0 , 0.0);

41

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

cubo(260-20*k*.8,220-20*k*.6,20,5);

}

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

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

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

}

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

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

}

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

cubo(481-20*k*.8,220-20*k*.6,20,5);

}

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

cubo(481,240+20*i,20,5);

}

//traves traseras

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

cubo(260-20*k*.8,420-20*k*.6,20,5);

}

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

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

}

//cubo delantero

42

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

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

}

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

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

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

}

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

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

}

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

cubo(481-20*k*.8,420-20*k*.6,20,5);

}

glFlush(); //forza dibujo

}

SALIDA

43

Practica 9.

Muñeco con Formas.

44

DESCRIPCIÓN.

Con las primitvas ya conocidas crea un dibujo de un niño.

BORRADOR

CODIGO

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

}

void dibuja(void) //funcion dibuja

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0 , 00, 0.0);

45

glColor3f(0.8,0.7,0.6);

circulo(800,1000,200);

circulo(1200,1000,200);

glEnd();

// cabeza

glColor3f(0.8,0.7,0.6); //borra pantalla

circulo(1000,1000,300);

// ojos

glColor3f(0.0,0.0,1.0);

circulo(950,1050,10);

circulo(1100,1050,10);

glEnd();

//orejas

//cuello

glBegin(GL_POLYGON);

glColor3f(0.8,0.7,0.6);

glVertex2f(1050,750);

glVertex2f(1050,820);

glVertex2f(950,820);

glVertex2f(950,750);

glVertex2f(1000,650);

// Playera

glBegin(GL_POLYGON);

glColor3f(1.0,1.0,1.0);

glVertex2f(1200,350);

glVertex2f(1200,550);

glVertex2f(1250,450);

glVertex2f(1350,450);

glVertex2f(1200,750);

glVertex2f(1050,750);

glVertex2f(1000,650);

glVertex2f(950,750);

46

glVertex2f(800,750);

glVertex2f(705,450);

glVertex2f(800,450);

glVertex2f(850,550);

glVertex2f(850,350);

glEnd();

//CUERPO

glBegin(GL_TRIANGLES);

glColor3f(1.0,1.0,1.0);

glVertex2f(1200,350);

glVertex2f(1000,650);

glVertex2f(850,350);

glEnd();

glBegin(GL_QUADS);

glColor3f(0.0,0.0,1.0);

glVertex2f(950,650);

glVertex2f(1050,650);

glVertex2f(1050,550);

glVertex2f(950,550);

glVertex2f(950,500);

glVertex2f(1050,500);

glVertex2f(1050,400);

glVertex2f(950,400);

glVertex2f(1200,350);

glVertex2f(850,350);

glVertex2f(850,300);

glVertex2f(1200,300);

glColor3f(0.0,0.0,0.0);

glVertex2f(950,350);

glVertex2f(1050,350);

47

glVertex2f(1050,300);

glVertex2f(950,300);

// BRAZOS

glColor3f(0.8,0.5,0.4);

glVertex2f(750,450);

glVertex2f(780,450);

glVertex2f(780,380);

glVertex2f(750,380);

glVertex2f(1275,450);

glVertex2f(1305,450);

glVertex2f(1305,380);

glVertex2f(1275,380);

glEnd();

//MANOS IZQUIERDA

glLineWidth (3);

glBegin(GL_LINES);

glColor3f(0.8,0.5,0.4);

glVertex2i(750,380);

glVertex2i(720,350);

glVertex2i(720,350);

glVertex2i(740,360);

glVertex2i(740,360);

glVertex2i(740,320);

glVertex2i(740,320);

glVertex2i(750,360);

glVertex2i(750,360);

glVertex2i(760,320);

48

glVertex2i(760,320);

glVertex2i(770,360);

glVertex2i(770,360);

glVertex2i(780,320);

glVertex2i(780,320);

glVertex2i(790,360);

glVertex2i(790,360);

glVertex2i(810,350);

glVertex2i(810,350);

glVertex2f(780,380);

// MANO DERECHA

glVertex2f(1275,380);

glVertex2f(1255,350);

glVertex2f(1255,350);

glVertex2f(1270,360);

glVertex2f(1270,360);

glVertex2f(1270,320);

glVertex2f(1270,320);

glVertex2f(1280,360);

glVertex2f(1280,360);

glVertex2f(1290,320);

glVertex2f(1290,320);

glVertex2f(1300,360);

49

glVertex2f(1300,360);

glVertex2f(1310,320);

glVertex2f(1310,320);

glVertex2f(1320,360);

glVertex2f(1320,360);

glVertex2f(1340,350);

glVertex2f(1340,350);

glVertex2f(1305,380);

// NARIZ

glColor3f(0.0,0.0,0.0);

glVertex2f(1020,1020);

glVertex2f(1000,1000);

glVertex2f(1000,1000);

glVertex2f(1040,1000);

// BOCA

glVertex2f(975,900);

glVertex2f(975,880);

glVertex2f(975,880);

glVertex2f(1050,880);

glVertex2f(1050,880);

glVertex2f(1050,900);

glEnd();

// CABELLO

50

glEnd();

// PANTALON

glBegin(GL_POLYGON);

glColor3f(0.3,0.7,0.7);

glVertex2f(850,300);

glVertex2f(750,100);

glVertex2f(900,50);

glVertex2f(1020,250);

glVertex2f(1020,300);

glEnd();

glBegin(GL_POLYGON);

glColor3f(0.3,0.7,0.7);

glVertex2f(1020,300);

glVertex2f(1020,250);

glVertex2f(1100,50);

glVertex2f(1250,100);

glVertex2f(1200,300);

glEnd();

glBegin(GL_TRIANGLES);

glColor3f(1.6 , 0.8 , 0.9);

glVertex2f(750,100);

glVertex2f(900,50);

glVertex2f(650,50);

glVertex2f(1100,50);

glVertex2f(1250,100);

glVertex2f(1350,50);

glEnd();

glFlush(); //forza dibujo

}

51

SALIDA

Practica 10.

Animación de un Circulo.

DESCRIPCIÓN.

52

Crea una nueva instrucción con la cual puedas mover un circula en forma de cuadrado repetitivamente.

CODIGO

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

//abajo

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

circulo(100+1*x,100,40);

x++;}

// derecha sube

if(x==500 && y>=1 && y<500) {

circulo(600,100+1*y,40);

y++;}

//arriva ezkierda

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

circulo(600-z,600,40);

z++;}

// izqierda abajo

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

circulo(100,600-w,40);

w++;

if(w==500) {x=1; y=1; z=1; w=1;}

53

glFlush();}

glutSwapBuffers();

}

Practica 11.

Animaciòn del Sistema Solar.

DESCRIPCIÓN.

54

En esta animaciòn realizaremos un sistema solar con movimien5o en todos los planetas.

BORRADOR

CODIGO

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto

glColor3f (0.9,0.8, 0.0);

circulo(500,500,50);

circulo( 500+ sin(ang) * 70,500 + cos(ang) * 70,10);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,70); //funcion circulo

glColor3f (0.5, 0.5, 0.9);

55

circulo( 500- sin(a) * 150,500 + cos(a) * 150,12);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,150);

glColor3f (1.6, 1.5, 1.7);

circulo( 500+ sin(b) * 200,500 + cos(b) * 200,12);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,200);

glColor3f (0.0,0.4, 0.0);

circulo( 500- sin(c) * 250,500 + cos(c) * 250,13);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,250);

glColor3f (0.2,0.0, 0.0);

circulo( 500+ sin(d) * 300,500 + cos(d) * 300,12);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,300);

glColor3f (1.0,0.0, 1.0);

circulo( 500- sin(f) * 350,500 + cos(f) * 350,13);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,350);

56

glColor3f (0.1,0.5, 1.6);

circulo( 500+ sin(g) * 400,500 + cos(g) * 400,12);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,400);

glColor3f (1.0,0.6, 0.0);

circulo( 500- sin(h) * 450,500 + cos(h) * 450,10);

glColor3f (1.0,1.0, 1.0);

circuloc(500,500,1,450);

a+=0.01;

b+=0.02;

c+=0.03;

d+=0.04;

f+=0.05;

g+=0.06;

h+=0.07;

ang=ang+0.01; //velocidad entre mas grande mas rapido y entre menos mas lento

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

57

if(ang==360){ang=0;}// se repite idefinidamente

glFlush(); //forzar dibujado

glutSwapBuffers(); //y esto

}

SALIDA

58

Practica 12.

Movimiento en Ocho.

DESCRIPCIÓN.

En esta animaciòn realizaremos el movimiento de una pelota en forma de ocho para lo cual ocuparemos lo siguiente.

BORRADOR

CODIGO

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3f(1.0, 0.9, 0.0);

59

circulo(200, 300, 70);

circulo(200,180,70);

glColor3f(1.0,1.0,1.0);

circulo(200,300,50);

circulo(200,180,50);

glColor3f(0.7,0.1,0.6);

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

circulo(200+ sin (a)*60,300- cos(a)*60,10);

a=a +0.01;

}

else{

circulo(200 + sin (b) *60,180+cos(b)*60,10);

b=b + 0.01;

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

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

}

glFlush();

glutSwapBuffers();

}

SALIDA

60

Practica 13.

Semaforo.

DESCRIPCIÓN.

Esta animaciòn como su nombre lo dice tendremos que realizar un semaforo el cual cambie de color.

BORRADOR

61

CODIGO

void dibuja(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//esto

glBegin(GL_QUADS);//Cuadros fondo semaforo

glColor3f(0.0 , 0.2 , 0.2);

glVertex2i(170,437);

glVertex2i(320,437);

glVertex2i(320,182);

glVertex2i(170,182);

glVertex2i(229,183);

glVertex2i(278,183);

glVertex2i(278,3);

62

glVertex2i(229,3);

glEnd();

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

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 Roja

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

}

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

63

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

circulo(247,226,34);

}// se repite idefinidamente

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

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

circulo(247,226,34);

}// se repite idefinidamente

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

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

circulo(247,302,34);

}// se repite idefinidamente

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

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

circulo(247,302,34);

}// se repite idefinidamente

if(a>50 && 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

64

}

SALIDA

Practica 14.

Cubo 3D.

DESCRIPCIÓN.

En esta practica tendremos que realizar un cubo el cual tenga movimiento.

BORRADOR

65

CODIGO

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

66

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

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

67

glPushMatrix();

mover();

if(malla) creaMalla();

if(ejes) creaEjes();

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

glColor3f(1.0,1.0,0.0);

//R

glTranslatef(-8.0,0.0, 0.0);

glutSolidCube(2);

glTranslatef(3.0,0.0, 0.0);

glutSolidCube(2);

glTranslatef(3.0,0.0, 0.0);

glutSolidCube(2);

glTranslatef(-6.0,3.0, 0.0);

glutSolidCube(2);

glTranslatef(0.0,3.0, 0.0);

glutSolidCube(2);

glTranslatef(3.0,-3.0, 0.0);

68

glutSolidCube(2);

glTranslatef(3.0,0.0, 0.0);

glutSolidCube(2);

glTranslatef(0.0,3.0, 0.0);

glutSolidCube(2);

glTranslatef(-3.0,0.0, 0.0);

glutSolidCube(2);

// AQUI PONES TU NOMBRE

//AQUI

//AQUI

//AQUI//AQUI

//AQUI//AQUI//AQUI

//AQUI

glPopMatrix ();

glFlush();

glutSwapBuffers ();

//anguloEsfera+=2.0f;

}

void reshape(int w, int h){

69

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

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

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glClear(GL_DEPTH_TEST);

}

SALIDA

70

71

Practica 15.

Nombre 3D.

DESCRIPCIÓN.

En esta practica tendremos que realizar un nombre en el cual tambien tenga movimiento y se vean todos sus lados.

CODIGO

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

72

glColor3d(1,1,1);

glVertex3i(0,0,-3);

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

}

glEnd();*/

// Colocamos una luz

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

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

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

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

//glShadeModel (GL_SMOOTH);

// esfera

glPushMatrix();

mover();

if(malla) creaMalla();

if(ejes) creaEjes();

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

glColor3f(0.0,0.0,1.0);

//A

glTranslatef(-8.0,0.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,1.0, 0.0);

glutSolidCube(1);

73

glTranslatef(0.0,1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,1.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(-1.0,1.0, 0.0);

glutSolidCube(1);

//l

glTranslatef(2.5,2.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

74

glTranslatef(1.0,-0, 0.0);

glutSolidCube(1);

//e

glTranslatef(2.0,3.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(0.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,0.0, 0.0);

glutSolidCube(1);

glTranslatef(-0.5,1.7, 0.0);

glutSolidCube(1);

glTranslatef(0.5,1.3, 0.0);

glutSolidCube(1);

//

glTranslatef(2.0,1.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,-1.0, 0.0);

glutSolidCube(1);

75

glTranslatef(1.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,-1.0, 0.0);

glutSolidCube(1);

glTranslatef(-1.0,3.0, 0.0);

glutSolidCube(1);

glTranslatef(1.0,1.0, 0.0);

glutSolidCube(1);

glTranslatef(-3.0,-3.0, 0.0);

glutSolidCube(1);

glTranslatef(-1.0,-1.0, 0.0);

glutSolidCube(1);

// AQUI PONES TU NOMBRE

//AQUI

//AQUI

//AQUI//AQUI

//AQUI//AQUI//AQUI

//AQUI

glPopMatrix ();

glFlush();

76

SALIDA

Practica Extra

Piramide.

DESCRIPCIÓN.

77

En esta actividad realizaremos con funciones en 3D el nombre de nosotros en cual tenga movimiento con el mouse y se vea en tercera dimensión.

BORRADOR

CODIGO

void dibuja(void) //funcion dibuja

{

int i,a=4;

78

glClear(GL_COLOR_BUFFER_BIT); //borra pantalla

glColor3f(1.0 , 1.0 , 1.0);

glLineWidth(2);

glBegin(GL_LINES);

//valor inicial ---- valor final o condicion ---- incremento

for(i=1;i<=10;i++){

//abajo

glVertex2i (240-a*i,240-a*i);

glVertex2i (260+a*i,240-a*i);

//derecha

glVertex2i (260+a*i,240-a*i);

glVertex2i (260+a*i,260+a*i);

//izquierda

glVertex2i (240-a*i,240-a*i);

glVertex2i (240-a*i,260+a*i);

//arriba

glVertex2i (240-a*i,260+a*i);

glVertex2i (260+a*i,260+a*i);

//linneas izquierdas

glColor3f(1.0 , 1.0 , 1.0);

glBegin(GL_LINES);

glVertex2i (236,236);

glVertex2i (232,232);

glVertex2i (228,228);

79

glVertex2i (224,224);

glVertex2i (220,220);

glVertex2i (216,216);

glVertex2i (212,212);

glVertex2i (208,208);

glVertex2i (204,204);

glVertex2i (200,200);

//derechas

glVertex2i (264,236);

glVertex2i (268,232);

glVertex2i (272,228);

glVertex2i (276,224);

glVertex2i (280,220);

glVertex2i (284,216);

glVertex2i (288,212);

glVertex2i (292,208);

glVertex2i (296,204);

80

glVertex2i (300,200);

//der arriba

glVertex2i (264,264);

glVertex2i (268,268);

glVertex2i (272,272);

glVertex2i (276,276);

glVertex2i (280,280);

glVertex2i (284,284);

glVertex2i (288,288);

glVertex2i (292,292);

glVertex2i (296,296);

glVertex2i (300,300);

//izq arriba

glVertex2i (236,264);

glVertex2i (232,268);

glVertex2i (228,272);

glVertex2i (224,276);

81

glVertex2i (220,280);

glVertex2i (216,284);

glVertex2i (212,288);

glVertex2i (208,292);

glVertex2i (204,296);

glVertex2i (200,300);

}

glEnd();

glFlush(); //forza dibujo

}

SALIDA

82

top related