#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