您的位置:首页 > 其它

模拟太阳、地球和月亮

2015-01-02 10:06 399 查看
代码如下:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: