Este documento presenta 13 prácticas de programación en OpenGL. La primera práctica muestra cómo crear un tablero de ajedrez usando puntos. La segunda práctica dibuja una estrella con líneas. La tercera práctica mejora el uso de líneas para dibujar un cubo. La cuarta práctica enseña a rellenar cuadrados y delinearlos para formar un cubo.
1. Colegio de Estudios Cientificos Y
Tecnologicos del Estado de México
Plantel Tecamac
PRACTICAS openGL
Alumnas: Sánchez Ruiz Ana Laura
Ugalde Sierra María de los Ángeles
Profr: René Domínguez Escalona
Grupo: 303 Especialidad: Informática
3er Semestre
Materia: Utilización de Software de diseño
2. Introducción
C++ es un lenguaje de programación orientado a objetos que toma la base del
lenguaje C y le agrega la capacidad de abstraer tipos como en Smalltalk.
C++ es un lenguaje de programación diseñado a mediados de los años 1980
por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso
lenguaje de programación C con mecanismos que permitieran la manipulación
de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados
a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron
facilidades de programación genérica, que se sumó a los otros dos paradigmas
que ya estaban admitidos (programación estructurada y la programación
orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de
programación multiparadigma.
Una instrucción es lo que le ordenamos a la maquina paara que ejecute, por
eso se dice que un programa es un conjunto de instrucciones; ya que cuando
ejecutamos un programa, se ejecutan asi mismo en su interior muchas
instrucciones que hacen que la maquina realize algo.
Estos son los tipos de instrucciones:
- instrucciones declarativas
- instrucciones de asignacion
- instrucciones selectivas
- instrucciones repetitivas
- instrucciones de entrada y salida de datos
- instrucciones de bifurcacion
- Instrucciones declarativas -
Sirven para declarar librerias, variables, constantes, arreglos , punteros,
estructuras…
Por ejemplo:
1.) Para librerias:
las librerias las declaramos porque vamos a usar recursos que contienen ellas.
[más detalles ]
#include <iostream.h> ——> cin , cout..
#include <conio.h> ——> funcion getch()..
#include <string.h> ——> para manipular cadenas
#include <math.h> ——> para operaciones numericas
#include <time.h> ——> para usar la hora
#include <stdio.h> ——> para usar alternativas de entrda – salida como printf ,
scanf
2.) Para variables:
3. INDICE
1.-Tablero de ajedrez
2.-Estrella
3.-Cubo con líneas
4.-Cubo delineado
5.-Muñeco con triángulos
6.-Casita
7.-Oso
8.-Cubo con cubitos
9.-Muñeco con formas
10.-Animacion circulo
12.-Animación sistema solar
13.-Movimiento en 8
14.-Semaforo
4. Practica Nº 1 Tablero de ajedrez
El propósito de esta práctica es aprender unas de las funciones básicas de
opengl.
En esta practica se creara un tablero con puntos para eso se utiliza la función
glBegin (GL_POINTS) y glVertex2i ( ).
Borrador:
Código:
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
void inicializa(void)
{
glClearColor (1.0,0.0,1.0,4.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
{
7. Practica Nº 2 Estrella
El propósito de esta practica es dibujar una estrella con líneas para poder realizar esta
practica las funciones principales son
glPointSize( );
glBegin(GL_LINES);
glVertex2i( )
borrador:
9. glVertex2i(50,300);
glVertex2i(350,300);
glBegin(GL_LINES);
glVertex2i(350,300);
glVertex2i(100,100);
glEnd();
glColor3f(1.0 ,1.0 ,1.0 );
glPointSize(50);
glBegin(GL_LINE);
glVertex2i(500,900);
glVertex2i(500,100);
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(475,475); //tamaño de la ventana
glutInitWindowPosition(0,0); //posicion inicial de la ventana
glutCreateWindow("ESTRELLA"); //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
}
Y al compilar y asi queda la ventana:
10. Practica Nº 3 Cubo con líneas
En esta practica se le da una mejor utilización a las lineas para eso se utiliza
las funciones
glBegin(GL_LINES);
glVertex2i( );
Borrador:
Código:
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
void inicializa(void)
{
glClearColor(1.0,0.0,1.1,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
12. glutInit(&argc, argv); //incializa GLUT
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //establece el modo de
visualización
glutInitWindowSize(400,400); //tamaño de la ventana
glutInitWindowPosition(0,0); //posicion inicial de la ventana
glutCreateWindow("cubo"); //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
Y al compilar nos que da de la siguiente manera:
Practica Nº 4 Cubo delineado
El propósito de esta practica es aprender; como rellenar cuadros y delinearlos
de tal forma que cada vez que se crea un cuadro se valla dando la forma de un
cubo para esto la principal función que se da es: glBegin(GL_QUADS);
Codigo:
#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, 1050.0, 0.0, 1000.0); //vista ortogonal
}
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT);
14. //cuadro
//izquierda
glVertex2i(600,700);
glVertex2i(600,800);
//arriva
glVertex2i(600,800);
glVertex2i(700,800);
//derecha
glVertex2i(700,800);
glVertex2i(700,700);
//abajo
glVertex2i(700,700);
glVertex2i(600,700);
//diagonal derecha esquina arriva
glVertex2i(650,850);
glVertex2i(600,800);
//linea cuadro atras
//linea cuadro atras
glVertex2i(650,850);
glVertex2i(750,850);
//linea cuadro atras
glVertex2i(750,850);
glVertex2i(750,750);
//linea cuadro atras
glVertex2i(700,700);
glVertex2i(750,750);
//linea cuadro atras
glVertex2i(700,800);
glVertex2i(750,850);
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("cubo"); //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
15. Y al compilar te debe quedar de la siguiente forma:
Practica Nº 5 Muñeco con triángulos
En esta práctica el propósito es aprender a utilizar otra función y crear un
muñeco con esa función que es para crear triángulos para eso la función
principal es: glBegin(GL_TRIANGLES);
Código:
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
void inicializa(void)
{
glClearColor(0.0,0.0,0.0,1.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 , 1.0 , 0.0);
glBegin(GL_TRIANGLES);
glVertex2i(160,40);
glColor3f(0.0 , 0.8 , 1.0);
glVertex2i(245,40);
glColor3f(0.0 , 0.8 , 1.0);
glVertex2i(200,80);
glEnd();
19. glBegin(GL_TRIANGLES);
glVertex2i(260,520);
glColor3f(1.0 , 0.0 , 1.0);
glVertex2i(298,480);
glColor3f(1.0 , 1.0 , 0.0);
glVertex2i(320,520);
glEnd();
glBegin(GL_POLYGON);
glVertex2i(520,100);
glVertex2i(520,140);
glVertex2i(480,180);
glVertex2i(440,180);
glVertex2i(400,140);
glVertex2i(400,100);
glVertex2i(440,60);
glVertex2i(480,60);
glEnd();
glBegin(GL_POLYGON);
glVertex2i(0,0);
glVertex2i(0,40);
glVertex2i(1440,40);
glVertex2i(1440,0);
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 primer 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
}
Y al terminar de poner todo este código se compila y el resultado debe ser:
20. Practica Nº 6 Casita
El propósito de esta practica es utilizar varias Funciones de las que se han
visto hasta el momento estas son triángulos, cuadrados y líneas para eso las
principales funciones son :
glBegin(GL_LINES);
glBegin(GL_QUADS);
glBegin(GL_TRIANGLES);
glBegin(GL_POLYGON);
Código:
#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
}
void dibuja(void) //funcion dibuja
{
glClear(GL_COLOR_BUFFER_BIT); //borra pantalla
glColor3f(0.0 , 0.0 , 0.0);
//carretera
glBegin(GL_QUADS);
glVertex2i(0,200);
glVertex2i(0,0);
glVertex2i(1000,0);
glVertex2i(1000,200);
glEnd();
glColor3f(1.0 , 1.0 , 0.0);
glLineWidth(4);
glBegin(GL_LINES);
glVertex2i(10,100);
glVertex2i(100,100);
27. glLineWidth(12);
glBegin(GL_LINES);
glVertex2i(90,450);
glVertex2i(90,600);
glEnd();
//techo cochera
glColor3f(1.0 , 1.0 , 0.0);
glBegin(GL_POLYGON);
glVertex2i(90,660);
glVertex2i(60,600);
glVertex2i(300,600);
glVertex2i(300,660);
glEnd();
//pinos
glColor3f(0.5 , 0.0 , 0.3);
glBegin(GL_QUADS);
glVertex2i(850,450);
glVertex2i(900,450);
glVertex2i(900,530);
glVertex2i(850,530);
glEnd();
int i,a=9;
glColor3f(0.3 , 1.0 , 0.2);
glLineWidth(3);
glBegin(GL_LINES);
for(i=0;i<=14;i++){
glVertex2i(1000-a*i,530+a*i);
glVertex2i(740+a*i,530+a*i);
}
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(750,750); //tamaño de la ventana
glutInitWindowPosition(0,0); //posicion inicial de la ventana
glutCreateWindow("MI primer 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
}
28. Por ultimo se compila y se abre la ventana con el resultado y así tiene que
quedar:
Practica Nº 7 Oso
El propósito de esta practica es empezar a utilizar una función para hacer
círculos por lo cual se le empiece a dar la forma de un oso para eso la funcion
principal es: circulo ( )
Código:
29. #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
}
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.6,0.4,0.2); //borra pantalla
circulo(250,250,120);
glColor3f(0.6,0.4,0.2);
circulo(140,150,50);
glColor3f(0.6,0.4,0.2);
circulo(350,150,50);
glColor3f(0.6,0.4,0.2);
circulo(370,320,40);
glColor3f(0.6,0.4,0.2);
circulo(130,320,40);
glColor3f(0.6,0.4,0.2);
circulo(250,400,70);
glColor3f(0.6,0.4,0.2);
circulo(195,450,25);
31. Practica Nº 9 Muñeco con formas
El propósito de esta practica es crear un muñeco o niño en el cual se van a
utilizar las funciones de circulo, del cuadrado, triángulos, polígonos y líneas.
Borrador:
32. Código:
#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
void inicializa(void)
{
glClearColor(1.0,0.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)
{
33. 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.9,0.6,0.5); //borra pantalla
circulo(250,400,70);
glColor3f(0.9,0.6,0.5);
circulo(195,410,25);
glColor3f(0.9,0.6,0.5);
circulo(305,410,25);
glColor3f(0.0,0.0,0.0);
circulo(225,415,5);
glColor3f(0.0,0.0,0.0);
circulo(275,415,5);
glColor3f(0.0,0.0,0.0);
circulo(250,370,8);
glColor3f(1.0,0.0,0.0);
circulo(250,367,4);
glColor3f(0.9,0.6,0.5);
circulo(150,218,21);
glColor3f(0.9,0.6,0.5);
circulo(358 ,218,21);
38. glBegin(GL_TRIANGLES);
glVertex2i(115,60);
glColor3f(0.0 , 0.0, 0.0);
glVertex2i(150,100);
glColor3f(0.0 , 0.0, 0.0);
glVertex2i(165,60);
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
}
Con este código se crea un muñeco muy gracioso y al copilarlo queda de la
siguiente forma:
39. Practica Nº 10 Animacion circulo
El propósito de esta practica es conocer el como dar animación o el efecto de
animación a un circulo de modo que parezca que se me mueve en forma
cuadrada o rectangular. Por medio de diferentes funciones.
Borrador:
40. Código:
#include <unistd.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
int x=1,z=1,w=1, y=1;
void inicializa(void)
{
glClearColor(0.0,0.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 1000.0, 0.0, 800.0);// el ancho y largo de nuestra pantalla
}
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<600){
circulo(100,700-1*x,40);
glFlush();
41. x++;
}
if(y>=1 && y<800 && x==600){
circulo(100+y,100,40);
glFlush();
y++;
}
if(w>=1 && w<600 && y==800 && x==600){
circulo(900,100+w,40);
glFlush();
w++;
}
if(z>=1 && z<800 && y==800 && x==600 && w==600){
circulo(900-z,700,40);
glFlush();
z++;
if(z==800) {z=1;x=1;y=1;w=1;}
}
glutSwapBuffers();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);
glutInitWindowSize(800,600);
glutInitWindowPosition(10,10);
glutCreateWindow("Ventana");
inicializa();
glutDisplayFunc(dibuja);
glutIdleFunc(dibuja);
glutMainLoop();
return 0;
}
Una vez teniendo todo terminado, al compilar la información del código aparece
la siguiente animación o una ejemplo de ella:
42. Practica Nº 12 Animacion sistema solar
El proposito de esta practica es saber realizar circulos de manera que se
muevan redondamente y se pueda apreciar un sistema solar.
Codigo:
#include <unistd.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
int rad=100;
double ang=0 , l=0 , a=0 , b=0 , c=0 , d=0 , e=0 , f=0 , k=0;
void inicializa(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 1900.0, 0.0, 1900.0);// el ancho y largo de nuestra pantalla
}
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);
47. if(ang==360){ang=0;}
glFlush();
glutSwapBuffers();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);
glutInitWindowSize(1200,600);
glutInitWindowPosition(10,10);
glutCreateWindow("Ventana");
inicializa();
glutDisplayFunc(dibuja);
glutIdleFunc(dibuja);
glutMainLoop();
return 0;
}
Al termino de esto , al compilar podrá mostrarse como un sistema solar se
mueve circularmente y con circunferencias de guía
Practica Nº 13 movimiento en 8
En esta practica aprenderas a interactuar las animaciones de forma que cree
una ilusion de animacion en forma de 8. Y poder realizar animaciones de este
tipo o parecidas.
Codigo:
48. #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(1.0,1.0,0.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 400.0, 0.0, 400.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+=6){ glVertex2f(x + sin(angulo) *
radio, y + cos(angulo) * radio);}
glEnd();}
void dibuja(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.5, 0.0, 1.0);
circulo(300, 300, 70);
circulo(300,180,70);
glColor3f(0.0,0.0,0.0);
circulo(300,300,50);
circulo(300,180,50);
glColor3f(1.0,0.3,1.0);
if(a>=6.15 && a<=12.41){
circulo(300+ sin (a)*60,300- cos(a)*60,10);
a=a +0.01;
}
else{
circulo(300 + 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();
49. glutSwapBuffers();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);
glutInitWindowSize(700,700);
glutInitWindowPosition(10,10);
glutCreateWindow("Ventana");
inicializa();
glutDisplayFunc(dibuja);
glutIdleFunc(dibuja);
glutMainLoop();
return 0;
}
Al termino de esta practica y al compilarla tedremos el siguiente resultado:
50. Practica Nº 14 semaforo
En esta practica aprenderas a utilizar efectos de animacion para crear una
ilusion parecida a la de un semaforo.
Codigo:
#include <unistd.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
int x=1,d=1, e=1,z=1,w=1, y=1;
void inicializa(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 1000.0, 0.0, 800.0);// el ancho y largo de nuestra pantalla
}
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 (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);
glColor3f(0.8,1.0,0.0);
glBegin(GL_QUADS);
glVertex2i(400,800);
glVertex2i(600,800);
glVertex2i(600,400);
glVertex2i(400,400);
glEnd();
52. e++;
}
if(e==800) {e=1;d=1;z=1;x=1;y=1;w=1;}
glutSwapBuffers();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);
glutInitWindowSize(800,600);
glutInitWindowPosition(10,10);
glutCreateWindow("Ventana");
inicializa();
glutDisplayFunc(dibuja);
glutIdleFunc(dibuja);
glutMainLoop();
return 0;
}
Una vez teniendo listo el código anterior y sus respectivos puntos y funciones al
compilarlo tendremos un resultado asi: