Cámara | Israel González de la Peña

#include <windows.h>

#include <GL/glut.h>

GLfloat ang1 = 0,ang2 = 0;
int moviendo, startx, starty;
float angulo = 0;

static GLdouble tamanio = 10.0;

GLUquadric *figura;

void dibujaObjeto(){

    gluQuadricDrawStyle(figura, GLU_FILL);

    glClear( GL_COLOR_BUFFER_BIT );
    glColor3f(0.0, 0.0, 0.0);

    glPushMatrix();
    glRotatef(angulo+2, 0, 1, 0);

    //Cabeza
    glPushMatrix();
    glTranslatef(0,2,0);
    glRotatef(90,1,0,0);
    glScalef(1.5,0.7,1);
    glutSolidSphere(0.6,30,30);
    glPopMatrix();

    //Cuerpo
    glPushMatrix();
    glTranslatef(0,1,0);
    glRotatef(90,1,0,0);
    glScalef(1.5,0.7,1);
    glutSolidTorus(0.5,0.5,30,30);
    glPopMatrix();

    //Cuerpo
    glPushMatrix();
    glTranslatef(0,0,0);
    glRotatef(90,1,0,0);
    glScalef(1.5,0.7,1);
    glutSolidTorus(0.7,0.7,30,30);
    glPopMatrix();

    //Cuerpo
    glPushMatrix();
    glTranslatef(0,-1,0);
    glRotatef(90,1,0,0);
    glScalef(1.5,0.7,1);
    glutSolidTorus(0.9,0.9,30,30);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(2,1,0);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(2.8,1,0);
    glScalef(0.7,0.7,0.7);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(3.4,1,0);
    glScalef(0.5,0.5,0.5);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(-2,1,0);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(-2.8,1,0);
    glScalef(0.7,0.7,0.7);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Brazo
    glPushMatrix();
    glTranslatef(-3.4,1,0);
    glScalef(0.5,0.5,0.5);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    //Ojo izq
    glPushMatrix();
    glColor3f(0, 0, 0);
    glTranslatef(-0.3,2.1,0);
    glutSolidSphere(0.15,20,20);
    glPopMatrix();

    //Ojo der
    glPushMatrix();
    glColor3f(0, 0, 0);
    glTranslatef(0.3,2.1,0);
    glutSolidSphere(0.15,20,20);
    glPopMatrix();

    // PIE DER
    glPushMatrix();
    glTranslatef(0.8,-2.8,0);
    glScalef(1.1,1.9,1);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    // PIE IZQ
    glPushMatrix();
    glTranslatef(-0.8,-2.8,0);
    glScalef(1.1,1.9,1);
    glutSolidSphere(0.5,20,20);
    glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();
}


void display(void)
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    glRotatef(ang2, 1, 0, 0);
    glRotatef(ang1, 0, 1, 0);
    dibujaObjeto();
    glPopMatrix();

    //glutSwapBuffers();
}

void mouse(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
        moviendo = 1;
        startx = x;
        starty = y;
    }
    if (state == GLUT_UP) {
        moviendo = 0;
    }
}

void mover(int x, int y)
{
    if (moviendo) {
        ang1 = ang1 + (x - startx);
        ang2 = ang2 + (y - starty);
        startx = x;
        starty = y;
        glutPostRedisplay();
    }
}

void proyeccion(void){



    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(10, 1, 20, 2000);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();



    gluLookAt(20.0, 10.0, 60.0,  /* vista en (0,8,60) */
              0.0, 0.0, 0.0,      /* centro en (0,8,0) */
              0.0, 1.0, 0.);      /* altura en Y */
}

int
main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutInitWindowSize(800, 800);

    glutCreateWindow("QUADRICS + MOUSE + CAMERA");

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);

    figura = gluNewQuadric(); //crear un objeto de opengl

    proyeccion();


    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(mover);
    glutMainLoop();
    return 0;
}




Comentarios

Entradas populares de este blog

Código Capitán América Diana Vargas

Reflejo | Diana Vargas