首页 > 代码库 > 模拟太阳、地球和月亮

模拟太阳、地球和月亮

代码如下:

#include <windows.h>//#include <GLUT/glut.h>#include <GL/glut.h>#include <math.h>#include <iostream>using namespace std;#define GL_PI 3.1415fvoid RenderScene(){    static float fMoonRot = 0.0f;    static float fEarthRot = 0.0f;    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);    glMatrixMode(GL_MODELVIEW);    glPushMatrix();    glTranslatef(0.0f,0.0f,-300.0f);    glColor3ub(255,255,0);    glutSolidSphere(25.0f,25,25);    glRotatef(fEarthRot,0.0f,1.0f,0.0f);    glColor3ub(0,0,255);    glTranslatef(0.0f,0.0f,-105.0f);    glutSolidSphere(15.0f,15,15);    glColor3ub(200,200,200);    glRotatef(fMoonRot,0.0f,1.0f,0.0f);    glTranslatef(0.0f,0.0f,-30.0f);    fMoonRot += 15.0f;    if(fMoonRot > 360.0f)        fMoonRot = 0.0f;    glutSolidSphere(6.0f,15,15);    glPopMatrix();    fEarthRot += 5.0f;    if(fEarthRot > 360.0f)        fEarthRot = 0.0f;    glutSwapBuffers();}void ChangeSize(GLsizei w,GLsizei h){    if(h==0)        h = 1;    GLfloat aspectRatio = (GLfloat)w/(GLfloat)h;    glViewport(0,0,w,h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(45.0f,aspectRatio,1.0,425.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}void SetupRC(){    glClearColor(0.0f,0.0f,0.0f,1.0f);    glColor3f(0.0f,1.0f,0.0f);    glEnable(GL_DEPTH_TEST);}void TimerFunction(int value){    glutPostRedisplay();    glutTimerFunc(33,TimerFunction,1);}int main(int argc, char *argv[]){   glutInit(&argc,argv);   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);   glutInitWindowSize(800,600);   glutCreateWindow("Simple");   glutDisplayFunc(RenderScene);   glutReshapeFunc(ChangeSize);   glutTimerFunc(33,TimerFunction,1);   SetupRC();   glutMainLoop();   return 0;} 

 

模拟太阳、地球和月亮