opengl简单模拟行星运转

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 

static int year = 0, day = 0,year2 = 0,day2 = 0;

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

void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);

   glPushMatrix();
  // glRotatef(90.0,1.0,0.0,0.0);
   glutWireSphere(1.0, 20, 16);   /* draw sun */
   glPopMatrix();

   glPushMatrix();
   glRotatef ((GLfloat) year2, 0.0, 1.0, 0.0);
   glTranslatef (2.0, 0.0, 0.0);
    glRotatef ((GLfloat) day2, 1.0, 1.0, 0.0);
   glutWireSphere(0.1, 10, 8);    /* draw another smaller planet */
   glPopMatrix();

   glPushMatrix();
   glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
   glTranslatef (1.5, 0.0, 0.0);
   glRotatef ((GLfloat) day, 1.0, 1.0, 0.0);
   glRotatef(-45.0,0.0,0.0,1.0);
   glRotatef(90.0,1.0,0.0,0.0);
   glutWireSphere(0.2, 10, 8);    /* draw smaller planet */
   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, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void keyboard (unsigned char key, int x, int y)
{
   switch (key) {
      case 'd':
         day = (day + 10) % 360;
         glutPostRedisplay();
         break;
      case 'D':
         day = (day - 10) % 360;
         glutPostRedisplay();
         break;
		 case 's':
         day2 = (day2 + 10) % 360;
         glutPostRedisplay();
         break;
      case 'S':
         day2 = (day2 - 10) % 360;
         glutPostRedisplay();
         break;
      case 'y':
         year = (year + 5) % 360;
		 year2 = (year2+3)%360;
         glutPostRedisplay();
         break;
      case 'Y':
         year = (year - 5) % 360;
		 year2 = (year2-3)%360;
         glutPostRedisplay();
         break;
      case 27:
         exit(0);
         break;
      default:
         break;
   }
}

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

你可能感兴趣的:(opengl简单模拟行星运转)