• 大小: 453KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签:

资源简介

完成一个简单的日地月系统演示程序。要求必须考虑太阳的自转、地球 和月亮的公转和自转;能够演示地球上的白天黑夜和四季变化,以及月亮的圆缺效果。为了增强演示效果,请绘制出太阳、地球和月亮的经纬线、赤道和轴线。为了增强真实感,请在太阳、地球、月亮的表面使用合适的纹理。 纹理贴图部分做的不太好。

资源截图

代码片段和文件信息

#include  
#include  
#include 
#include 
#include 
#ifndef GL_BGR_EXT
#include 
#endif

float sun =0;
float year = 0;
float month =0;
float day =0;
GLuint texSun;
GLuint texPlanet;
GLuint texMoon;

GLuint  Texture(const char *FileName)
{

FILE *file =fopen(FileName “rb“);
fseek(filesizeof(BITMAPFILEHEADER)SEEK_SET);
BITMAPINFOHEADER info;
fread(&info sizeof(info)1file);
long Width=info.biWidth;
long Height=info.biHeight;
GLubyte* pixels;
pixels = (GLubyte*)malloc(Width*Height*3);
fread(pixelsWidth*Height*31file);
fclose(file);
glTexImage2D(GL_TEXTURE_2D03WidthHeight0GL_BGR_EXTGL_UNSIGNED_BYTEpixels);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_LINEAR);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_LINEAR);
// glEnable(GL_TEXTURE_2D);
}

void Keyboard(unsigned char keyint xint y)
{
if(key==27)
exit(0);
}
void Timer(int millis)
{
float dday=6speed =4;
float dsun = speed*dday/27.5;        //太阳自转 
float dmonth=speed*dday/29.5;        //月亮自转 
float dyear =speed*dday/365.2475;    //地球公转 
sun = fmod(sun+dsun360);         //计算太阳自转角度 
month =fmod(month+dmonth360);       //计算月亮自转和公转角度 
year =fmod(year+dyear360);          //计算地球公转角度 
day = fmod(day+dday360);            //计算地球自转角度 
glutPostRedisplay();
glutTimerFunc(millisTimermillis);
}
void Reshape(int wint h) 

    glViewport(00wh);
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(30(float)w/h11000); 
    glTranslatef(00-8);
glRotatef(30100); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
}
void Light(float r)
{
float pos[] [4]=
{
{r001}{-r001}{0r01}{0-r01}{00r1}{00-r1}{0.90.90.90.1}
};
for (int i=0;i<6;++i)
{
glLightfv(GL_LIGHT0+iGL_POSITIONpos[i]);
glLightfv(GL_LIGHT0+iGL_DIFFUSEpos[6]);

glEnable(GL_LIGHT0+i);


}
void Material(float rfloat gfloat b)
{
float aa[]={rgb1};
glEnable(GL_LIGHTING);
glMaterialfv(GL_FRONTGL_DIFFUSEaa);
}
void Color(float rfloat gfloat b)
{
glDisable(GL_LIGHTING);
glColor3f(rgb); 
}


void Wire(float r)
{
Color(0.50.50.5); 
glutWireSphere(r*1.0052412);
}
void Ball(float r)
{
glTranslatef(-r00);
Color(0.90.10.9);
glutSolidSphere(r*0.1126);
}

void Sun(float r)
{
glEnable(GL_TEXTURE_2D);
glTexGeni(GL_S GL_TEXTURE_GEN_MODE GL_SPHERE_MAP);   // 设置s方向的纹理自动生成
glTexGeni(GL_T GL_TEXTURE_GEN_MODE GL_SPHERE_MAP);   // 设置t方向的纹理
glEnable(GL_TEXTURE_GEN_S);      // 自动生成s方向纹理坐标
glEnable(GL_TEXTURE_GEN_T);      // 自动生成t方向纹理坐标
glBindTexture(GL_TEXTURE_2DtexSun);  //选择纹理texture[status] 
glPushMatrix();
glRotatef(90-100); 
Color(0.90.10.1);
glutSolidSphere(r2412);
Wire(r);
Ball(r);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
}
void Planet(float r)
{
glEnable(GL_TEXTURE_2D);
glTexGeni(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       43254  2018-09-04 17:10  test8\moon.bmp
     文件      345654  2018-09-04 16:56  test8\planet.bmp
     文件       50918  2018-09-11 12:18  test8\planet.jpg
     文件      172854  2018-09-04 17:10  test8\sun.bmp
     文件        5117  2018-09-11 12:20  test8\test8.cpp
     文件      275761  2018-09-11 12:20  test8\test8.exe
     目录           0  2018-09-11 12:20  test8\

评论

共有 条评论