lunes, 20 de febrero de 2017

Tarea 3 Logos - Edgar


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