#include <windows.h>
#include <C:\GLUT\include\GL\glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535897932384626433832795
/** Descripcion: Sol formado por dos cuadros y un circulo que gira
* y una nube formada por cuatro círculos que se desplaza, esto al
* presionar las teclas 'a' o 'z'
*
* Autores:
* Edgar Villa
* Karina Miranda
* Abigail Romero
* Isabel Gaona
* Fecha de creacion: 16/02/17
* Revisiones: ---
* Fecha de ultima actualizacion: 18/02/17
*/
float r,g,b,dx,dy;
int ancho = 500, alto = 500; // alto y ancho para la ventana
int inc = 1; // variable usada para trasladar la nube al presionar las teclas 'a' y 'z'
int giro = 0; // variable usada para rotar el sol al presionar las teclas 'a' y 'z'
/* dibua un cuadrao
*/
void cuadro( float lado, float r, float g, float b)
{
glColor3f(r,g,b);
glBegin(GL_POLYGON );
glVertex2f(lado, lado);
glVertex2f(-lado, lado);
glColor3f(r-0.1,g-0.3,b);
glVertex2f(-lado, -lado);
glVertex2f(lado, -lado);
glEnd();
}
/**
* Traza circulos acorde a los parámetros recibidos
* @param cx Coordenada x donde se ubicará el centro del circulo
* @param cy Coordenada y donde se ubicará el centro del circulo
* @param radio Medida que tendrá de radio el circulor
* @param r Color rojo de un RGB de 0.0 a 1.0
* @param g Color verde de un RGB de 0.0 a 1.0lor
* @param b Color azul de un RGB de 0.0 a 1.0
* @param a1 Inicio del trazo del circulo en radianes
* @param a2 Fin del trazo del circulo en radianes
*/
void circulo( float cx, float cy, float radio, float r,
float g, float b, float a1, float a2 )
{
glEnable( GL_LINE_SMOOTH );
glBegin( GL_POLYGON );
glColor3f(r,g,b);
glVertex2f(cx,cy);
for( float i = a1; i<= a2; i+=0.01 )
{
dx = radio*cos(i) + cx;
dy= radio*sin(i) + cy;
glVertex2f(dx,dy);
}
glEnd();
}
void key(unsigned char c, int x, int y)
{
if (c==27)
{
exit(0);
}
if (c=='a')
{
inc= inc + 5;
giro = giro + 5;
}
if (c=='z')
{
inc= inc - 5;
giro = giro - 5;
}
// if para que la nube vuelva a aparecer del otro lado al llegar a un borde
if( inc < -394 )
inc = 286; // al llegar al borde izquierdo y desaparecer se va al borde derecho
if( inc > 286 )
inc = -394; // al llegar al borde derecho y desaparecer se va al borde izquierdo
glutPostRedisplay();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(90 ,0,0,1);
glTranslatef(0,100,0);//traslada
glRotatef(giro ,0,0,1);
glPushMatrix();
cuadro(100,1,0.85,0);
//cuadro(100,1,0.8,0);
glRotatef(45,0,0,1);
cuadro(100,1,0.9,0);
// cuadro(100,1,0.7,0);
circulo( 0,0, 100,1,0.9,0,0,2*PI+0.1);
glPopMatrix();
glPopMatrix();
glPushMatrix(); //empieza de adentro hacia afuera
glTranslatef(inc,0,0);
glPushMatrix();
glTranslatef(100,-60,0);
circulo( 0, 0, 45, 1, 1, 1, 0, PI);
glTranslatef(-30,30,0);
circulo( 0, 0, 40,1,1,1, 0, PI+0.8);
glTranslatef(-30,20,0);
circulo( 0, 0, 40, 1, 1, 1, 0, PI+0.5);
glTranslatef(-20,-50,0);
circulo( 0, 0, 50,1,1,1, 0, PI);
glPopMatrix();
glPopMatrix();
glFlush();
}
void Init()
{ glClearColor( 65.0/255.0, 161.0/255.0, 245.0/255.0,0);
gluOrtho2D(-ancho/2,ancho/2,-alto/2,alto/2);
}
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(ancho,alto);
glutCreateWindow("Sol con nube");
Init();
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutMainLoop();
return 0;
}
lunes, 20 de febrero de 2017
Práctica 1 Sol y Nube - Equipo
Suscribirse a:
Comentarios de la entrada (Atom)

No hay comentarios.:
Publicar un comentario