lunes, 22 de agosto de 2016

Transformaciones Geométricas 

(Héctor Daniel Garnica Ayala)

A continuación  se aplicará la transformación gemétrica de translación a 2 objetos (una mesa y una silla) con las teclas de dirección izquierda y derecha.
Obteniedo como resultado lo siguiente:
Objetos en su estado inicial

Aplicando la Translación

/*
** ELABORADO POR: HECTOR DANIEL GANICA AYALA
** TRANSFORMACIONES GEOMETRICAS
    Se aplica la matriz pop y push para la transformaciones de geometrias haciendo que la mesa y objetos se
    muevan con las teclas de direccion izquierda y derecha
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>

float Pi=3.141516;
int band=0;


void Tecla(int tecla, int x, int y)
{
    switch(tecla)
    {
    case(27):
        exit(0);
    case(GLUT_KEY_LEFT):
        band=1;
        break;
    case(GLUT_KEY_RIGHT):
        band=0;
        break;
    default:
        break;
    }
    glutPostRedisplay();//indica que la ventana actual necesita ser redibujada
}


void dibujarMesa()
{
    //MESA
    glColor3f( 0.60,0.40,0.12);
    glBegin(GL_QUADS);
        glVertex2i(-4,0);
        glVertex2i(-4,3);
        glVertex2i(-3,3);
        glVertex2i(-3,0);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(-4,0);
        glVertex2i(-4,3);
        glVertex2i(-3,3);
        glVertex2i(-3,0);
    glEnd();

    glColor3f( 0.60,0.40,0.12);
    glBegin(GL_QUADS);
        glVertex2i(4,0);
        glVertex2i(4,3);
        glVertex2i(3,3);
        glVertex2i(3,0);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(4,0);
        glVertex2i(4,3);
        glVertex2i(3,3);
        glVertex2i(3,0);
    glEnd();

    glColor3f( 0.60,0.40,0.12);
    glBegin(GL_QUADS);
        glVertex2i(-4,3);
        glVertex2i(-4,4);
        glVertex2i(4,4);
        glVertex2i(4,3);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(-4,3);
        glVertex2i(-4,4);
        glVertex2i(4,4);
        glVertex2i(4,3);
    glEnd();

    //FRUTA
    glBegin(GL_POLYGON);
    glColor3f(1.0, 0.8, 0.0);
    for(int i=0; i<100; i++)
    {
        float x = 0.7*cos(i*2*Pi/100);
        float y = 0.7*sin(i*2*Pi/100);
        glVertex2f(x-0.5, y+5.3);

    }
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
    for(int i=0; i<100; i++)
    {
        float x = 0.7*cos(i*2*Pi/100);
        float y = 0.7*sin(i*2*Pi/100);
        glVertex2f(x-0.5, y+5.3);

    }
    glEnd();


    glBegin(GL_POLYGON);
    glColor3f(1.0,0.0,0.0);
    for(int i=0; i<100; i++)
    {
        float x = 0.7*cos(i*2*Pi/100);
        float y = 0.7*sin(i*2*Pi/100);
        glVertex2f(x+0.5, y+5.3);

    }
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
    for(int i=0; i<100; i++)
    {
        float x = 0.7*cos(i*2*Pi/100);
        float y = 0.7*sin(i*2*Pi/100);
        glVertex2f(x+0.5, y+5.3);

    }
    glEnd();

    //FRUTERO
    glColor3f( 0.0,1.0,0.0);
    glBegin(GL_QUADS);
    glVertex2i(-2,4);
    glVertex2i(-2,5);
    glVertex2i(2,5);
    glVertex2i(2,4);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
    glVertex2i(-2,4);
    glVertex2i(-2,5);
    glVertex2i(2,5);
    glVertex2i(2,4);
    glEnd();



}


void dibujarSilla()
{
    glColor3f( 0.0,0.6,1.0);
    glBegin(GL_QUADS);
        glVertex2i(8,0);
        glVertex2i(8,7);
        glVertex2i(9,7);
        glVertex2i(9,0);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(8,0);
        glVertex2i(8,7);
        glVertex2i(9,7);
        glVertex2i(9,0);
    glEnd();

    glColor3f( 0.0,0.6,1.0);
    glBegin(GL_QUADS);
        glVertex2i(6,0);
        glVertex2i(6,2);
        glVertex2i(7,2);
        glVertex2i(7,0);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(6,0);
        glVertex2i(6,2);
        glVertex2i(7,2);
        glVertex2i(7,0);
    glEnd();

    glColor3f( 0.0,0.6,1.0);
    glBegin(GL_QUADS);
        glVertex2i(6,2);
        glVertex2i(6,3);
        glVertex2i(8,3);
        glVertex2i(8,2);
    glEnd();

    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_LINE_STRIP);
        glVertex2i(6,2);
        glVertex2i(6,3);
        glVertex2i(8,3);
        glVertex2i(8,2);
    glEnd();

}

void dibujarPiso()
{
    glColor3f( 0.0,0.0,0.0);
    glBegin(GL_QUADS);
        glVertex2i(-6,0);
        glVertex2i(-6,-1);
        glVertex2i(10,-1);
        glVertex2i(10,0);
    glEnd();

}

void display()
{

    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);

    dibujarPiso();

    if(band==0)
    {
        //GRUPO MESA
        glPushMatrix();
            glColor3f( 0.60,0.40,0.12);
            dibujarMesa();
        glPopMatrix();

        //GRUPO SILLA
        glPushMatrix();
            glColor3f( 0.0,0.6,1.0);
            dibujarSilla();
        glPopMatrix();

    }
    else
    {
        //GRUPO MESA
        glPushMatrix();
            glTranslated(-2, 0, 0);
            glColor3f( 0.60,0.40,0.12);
            dibujarMesa();
        glPopMatrix();

        //GRUPO SILLA
        glPushMatrix();
            glTranslated(0, -4.3, 0);
            glRotated(45,0,0,1);
            glColor3f( 0.0,0.6,1.0);
            dibujarSilla();
        glPopMatrix();
    }
    glFlush();

}


void Init()
{   glClearColor(1.0,1.0,1.0,0);
    gluOrtho2D(-10,10,-10,10);
}
int main(int argc,char** argv)
{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (600, 600);
    glutInitWindowPosition (300, 100);
    glutCreateWindow ("TRANSFORMACIONES");
    Init();
    glutSpecialFunc(Tecla);//FUNCION PARA LEER LAS FLECHAS DE DIRECCION, teclas especiales
    glutDisplayFunc(display);
    glutMainLoop();/** nunca termine también significa que el programa no sale nunca del ciclo de ejecución*/

    return 0;
}




Descargar Archivo.txt
Transformaciones.txt

No hay comentarios:

Publicar un comentario