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