模拟太阳、地球和月亮

代码如下:

#include <windows.h>
//#include <GLUT/glut.h>
#include <GL/glut.h>
#include <math.h>
#include <iostream>
using namespace std;

#define GL_PI 3.1415f

void 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;
}
 
态度决定高度,细节决定成败,
原文地址:https://www.cnblogs.com/lxk2010012997/p/4195368.html