#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;
}