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

代码片段和文件信息
#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\
相关资源
- 计算机图形学 边填充算法实现代码
- 计算机图形学课设 画板
- 简易绘图程序(计算机图形学课程设
- 计算机图形学(openGL)代码
- 图形学集成程序dda、中点算法、多边
- 计算机图形实验(哈尔滨工程大学)
- 计算机图形学-全.rar
- 7-Uath茶壶
- 计算机图形学考试试卷试题6套含3套的
- GPU精粹1-中文版.pdf《GPU精粹:实时图形
- 计算机图形学 基于3D图形开发技术
- 3D游戏与计算机图形学中的数学方法
- 虚拟现实技术文献英文
- 华南理工大学软件学院计算机图形学
- GPU+编程与CG+语言之阳春白雪下里巴人
- 计算机图形学实验 opengl实现太阳系运
- 中国科学技术大学计算机图形学大作
- 计算机图形学的实习
- 计算机图形大作业opengl-物联网.rar
- 计算机图形学 z-buffer
- 计算机图形学经典论文计算机图形学
- 计算机图形学几何工具算法详解
- 广东工业大学 各年 计算机图形学最全
- 交互式计算机图形学 基于WEBGL的自顶
- Interactive Computer Graphics:A Top-Down App
- 清华大学版计算机图形学
- 计算机图形学 边界定义的8连通区域
- 实验一 OpenGL 程序设计基础
- 计算机图形学与几何造型导论 英文版
- 计算机图形学基础教程.docx
评论
共有 条评论