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