Tarea 3
#include <windows.h> #include <C:\GLUT\include\GL\glut.h> #include <stdlib.h> #include <math.h> #define PI 3.1415926535897932384626433832795 /** Descripcion: Mediante el uso de OpenGL y GLUT.h se generan tres logos * Yin y Yang * Domino's Pizza * Rombos Rojos * * Autores: * Edgar Villa Miguel. * Fecha de creacion: 11/02/17 * Revisiones: --- * Fecha de ultima actualizacion: 11/02/17 */ float dx,dy; /** * 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 ); // suaviza el trazado de la línea glBegin( GL_POLYGON ); // une los puntos de un poligono y lo rellena glColor3f(r,g,b); // establece el color glVertex2f(cx,cy); // coordenadas del origenl del circulo // ciclo for para la posición y unión de los puntos del circulo for( float i = a1; i<= a2; i += 0.01 ) { dx = radio*cos(i) + cx; dy = radio*sin(i) + cy; glVertex2f( dx, dy); } glEnd(); } void display(void){ glClear( GL_COLOR_BUFFER_BIT ); // limpia, libera el buffer glPointSize(5); // el valor es el tamaño del punto que tendrá en pixeles // Logo de Yin y Yang circulo( 185.0, 210.0, 155, 0.0, 0.0, 0.0, 0.0, 2*PI ); // contorno negro de la primer figura circulo( 185.0, 210.0, 152, 1.0, 1.0, 1.0, PI/2.0, 3*PI/2.0 ); // medio circulo blanco izquierdo circulo( 185.0, 285.0, 76, 1.0, 1.0, 1.0, 0, 2*PI ); // circulo mediano blanco circulo( 185.0, 133.0, 76, 0.0, 0.0, 0.0, 0, 2*PI ); // circulo mediano negro circulo( 185.0, 285.0, 19, 0.0, 0.0, 0.0, 0, 2*PI ); // circulo pequeño negro circulo( 185.0, 133.0, 19, 1.0, 1.0, 1.0, 0, 2*PI ); // circulo pequeño blanco // Logo de Domino's Pizza // primera sección azul glBegin( GL_POLYGON ); // establece el modo de trazo glColor3f( 0.0, 0.482352, 0.678431 ); // establece el color // se ubican los puntes de interes para dar la forma deseada glVertex2i( 583.0, 241.0 ); glVertex2i( 490.0, 148.0 ); glVertex2i( 490.0, 140.0 ); glVertex2i( 578.0, 51.0 ); glVertex2i( 588.0, 51.0 ); glVertex2i( 681.0, 144.0 ); glEnd(); // circulos pequeños en las esquinas de la izquierda circulo( 492.0, 144.0, 4.0, 0.0, 0.482352, 0.678431, PI/2.0, 3*PI/2.0 ); circulo( 583.0, 52.0, 4.0, 0.0, 0.482352, 0.678431, PI, 2*PI ); // circulos blanco sobre el cuadro azul circulo( 547.0, 144.0, 24.0, 1.0, 1.0, 1.0, 0, 2*PI ); circulo( 619.0, 144.0, 24.0, 1.0, 1.0, 1.0, 0, 2*PI ); // segunda sección roja glBegin( GL_POLYGON ); // establece el modo de trazo glColor3f( 0.882352, 0.090196, 0.207843 ); // establece el color // se ubican los puntes de interes para dar la forma deseada glVertex2i( 590, 247 ); glVertex2i( 687, 149 ); glVertex2i( 780, 243 ); glVertex2i( 780, 251 ); glVertex2i( 692, 340 ); glVertex2i( 682, 340 ); glEnd(); // circulos pequeños en las esquinas de la derecha circulo( 778.0, 247.0, 4.0, 0.882352, 0.090196, 0.207843, 3*PI/2.0, 5*PI/2.0 ); circulo( 687.0, 337.0, 5.0, 0.882352, 0.090196, 0.207843, 0.0, PI ); // circulos blanco sobre el cuadro azul circulo( 687.0, 247.0, 24.0, 1.0, 1.0, 1.0, 0, 2*PI ); // Figura de Rombos rojos glBegin( GL_POLYGON ); // establece el modo de trazo glColor3f( 0.854901, 0.011764, 0.129411 ); // establece el color // se ubican los puntes de interes para dar la forma deseada // rombo superior glVertex2i( 1126, 253 ); glVertex2i( 1069, 352 ); glVertex2i( 1010, 253 ); glVertex2i( 1069, 157 ); // punto y centro común de los rombos glEnd(); glBegin( GL_POLYGON ); // establece el modo de trazo glColor3f( 0.854901, 0.011764, 0.129411 ); // establece el color // se ubican los puntes de interes para dar la forma deseada // rombo izquierdo glVertex2i( 1069, 157 ); // punto y centro común de los rombos glVertex2i( 958, 157 ); glVertex2i( 903, 59 ); glVertex2i( 1013, 59 ); glEnd(); glBegin( GL_POLYGON ); // establece el modo de trazo glColor3f( 0.854901, 0.011764, 0.129411 ); // establece el color // se ubican los puntes de interes para dar la forma deseada // rombo derecho glVertex2i( 1069, 157 ); // punto y centro común de los rombos glVertex2i( 1124, 59 ); glVertex2i( 1237, 59 ); glVertex2i( 1178, 157 ); glEnd(); glFlush(); // libera memoria } int main(int argc, char** argv){ glutInit(&argc, argv); // Inicializa la libreria GLUT // glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize( 1280, 400 ); // Inicializa el tamaño de la ventana glutInitWindowPosition( 10,50); // posicion de la ventana glutCreateWindow("Tarea 3 - 3 Logos"); // crea la ventana glClearColor( 1.0, 1.0, 1.0, 0); gluOrtho2D( 0, 1280, 0, 400 ); // glutDisplayFunc(display); Aqui le indicamos a GLUT que la rutina // utilizada como Display sera la llama display. Este tipo de rutinas se // ejecuta una vez por ciclo de programa, y será la que realice // todas las operaciones gráficas (render). // glutDisplayFunc(display); // ciclo de la aplicación glutDisplayFunc(display); glutMainLoop(); return 0; }
No hay comentarios.:
Publicar un comentario