lunes, 24 de marzo de 2014

Programa rotación de figuras

#include <GL/gl.h>
 #include <GL/glu.h>
 #include <GL/glut.h>

GLfloat anio = 0, dia = 0, luna=0, anio2=0, luna2=0, anio3=0, luna3=0;
int angulo_z = 10, opc=0;

 void init(void){
     glClearColor (0.0, 0.0, 0.0, 0.0);
     glShadeModel (GL_FLAT);
 }

 void display(void){
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glClearDepth(1.0);
     glColor3f (1.0, 1.0, 0.0);// color del sol
     glPushMatrix();

         glutSolidSphere(0.7, 20, 16);/* Dibuja el Sol */
         glRotatef (angulo_z, 0.0, 0.0, 1.0);    //angulo constante de inclinacion en z
         glRotatef (anio, 0.0, 1.0, 0.0);    //angulo segun el numero de años
         glTranslatef (3.0, 0.0, 0.0);    //Distancia entre el sol y el primer planeta

             glPushMatrix();
             glRotatef ( dia, 0.0, 1.0, 0.0);    //angulo del planeta segun el dia
             glColor3f (0.0, 0.0, 1.0);                 // color del planeta
             glutWireSphere(0.3, 10, 8);                /* Dibuja el primer planeta */
             glPopMatrix();



         glRotatef (25, 0.0, 0.0, 1.0);               //Angulo constante de la luna respecto al primer planeta
         glRotatef (luna, 0.0, 1.0, 0.0);   //Angulo de la luna segun la hora
         glTranslatef (0.5, 0.0, 0.0);                //Distancia de la luna respecto al primer planeta
         glColor3f (0.7, 0.7, 0.7);
         glutWireSphere(0.07, 10, 8);                 // dibuja la luna del primer planeta

        glPopMatrix();

     glutSwapBuffers();
 }


 void display2(void){
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glClearDepth(1.0);
     glColor3f (1.0, 1.0, 0.0);// color del sol
     glPushMatrix();

         glutSolidSphere(0.7, 20, 16);/* Dibuja el Sol */
         glRotatef (angulo_z, 0.0, 0.0, 1.0);    //angulo constante de inclinacion en z
         glRotatef (anio2, 0.0, 1.0, 0.0);    //angulo segun el numero de años
         glTranslatef (3.0, 1.0, 0.0);    //Distancia entre el sol y el primer planeta

             glPushMatrix();
             glRotatef ( dia, 0.0, 1.0, 0.0);    //angulo del planeta segun el dia
             glColor3f (1.0, 1.0, 1.0);                 // color del planeta
             glutWireSphere(0.3, 10, 8);                /* Dibuja el primer planeta */
             glPopMatrix();



         glRotatef (25, 0.0, 0.0, 1.0);               //Angulo constante de la luna respecto al primer planeta
         glRotatef (luna2, 0.0, 1.0, 0.0);   //Angulo de la luna segun la hora
         glTranslatef (0.5, 0.0, 0.0);                //Distancia de la luna respecto al primer planeta
         glColor3f (0.7, 0.7, 0.7);
         glutWireSphere(0.07, 10, 8);                 // dibuja la luna del primer planeta

        glPopMatrix();

     glutSwapBuffers();
 }

 void display3(void){
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glClearDepth(1.0);
     glColor3f (1.0, 1.0, 0.0);// color del sol
     glPushMatrix();

         glutSolidSphere(0.7, 20, 16);/* Dibuja el Sol */
         glRotatef (angulo_z, 0.0, 0.0, 1.0);    //angulo constante de inclinacion en z
         glRotatef (anio3, 0.0, 1.0, 0.0);    //angulo segun el numero de años
         glTranslatef (3.0, -1.0, 0.0);    //Distancia entre el sol y el primer planeta

             glPushMatrix();
             glRotatef ( dia, 0.0, 1.0, 0.0);    //angulo del planeta segun el dia
             glColor3f (1.0, 0.0, 0.0);                 // color del planeta
             glutWireSphere(0.3, 10, 8);                /* Dibuja el primer planeta */
             glPopMatrix();



         glRotatef (25, 0.0, 0.0, 1.0);               //Angulo constante de la luna respecto al primer planeta
         glRotatef (luna3, 0.0, 1.0, 0.0);   //Angulo de la luna segun la hora
         glTranslatef (0.5, 0.0, 0.0);                //Distancia de la luna respecto al primer planeta
         glColor3f (0.7, 0.7, 0.7);
         glutWireSphere(0.07, 10, 8);                 // dibuja la luna del primer planeta

        glPopMatrix();

     glutSwapBuffers();
 }

 void reshape (int w, int h){
     glViewport (0, 0, (GLsizei) w, (GLsizei) h);
     glMatrixMode (GL_PROJECTION);
     glLoadIdentity ();
     gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt (0.0, 1.0, 6.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
 }

 void idle()
{
    display();
    display2();
    display3();
}



 void keyboard(unsigned char key, int x, int y)
{
    switch(key)
    {

    case 'a':
        anio+=1.0f;
    break;


    case 'A':
        luna+=1.5f;
    break;

    case 's':
        anio2+=1.5f;
    break;

    case 'S':
        luna2+=1.5f;
    break;

    case 'd':
        anio3+=1.5f;
    break;

    case 'D':
        luna3+=1.5f;
    break;



    }
}




 int main(int argc, char** argv){
     glutInit(&argc, argv);
     glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
     glutInitWindowSize (500, 500);
     glutInitWindowPosition (100, 100);
     glutCreateWindow (argv[0]);
     init ();
     glutDisplayFunc(display);
     glutDisplayFunc(display2);
     glutReshapeFunc(reshape);
     glutIdleFunc(idle);
     glutKeyboardFunc(keyboard);
     glutMainLoop();
     return 0;
 }

No hay comentarios:

Publicar un comentario