资源简介
完成一个简单的日地月系统演示程序。要求必须考虑太阳的自转、地球
和月亮的公转和自转;能够演示地球上的白天黑夜和四季变化,以及月亮的圆缺效果。为了增强演示效果,请绘制出太阳、地球和月亮的经纬线、赤道和轴线。为了增强真实感,请在太阳、地球、月亮的表面使用合适的纹理。
纹理贴图部分做的不太好。
代码片段和文件信息
#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的自顶
- 计算机图形学实现多边形裁剪
- 计算机图形学画花瓣曲线
- 计算机图形学-基于weiler-atherton算法的
- 山东大学2018计算机图形学考试
- 反走样算法-计算机图形学
- 计算机图形学 边界定义的8连通区域
- 计算机图形学,内含DDA画直线,画圆
- 计算机图形学旋转和投影
- 计算机图形学自行车实验
- 计算机图形学实验六真实感图形程序
- 计算机图形学实验五三维图形变换程
- B样条曲线绘制图案--一个计算机图形
- 计算机图形学简明教程课后习题答案
- 安徽大学计算机图形学考试题集.doc
- 计算机图形学答案详细 清华大学出版
- 西南交大计算机图形学期末复习提纲
- 大连理工大学计算机图形学考试资料
- 计算机图形学基础教程课后习题答案
- 动态旋转双三次Bezier曲面实体模型
- GLUT库(glut.h、glut32.dll、glut32.lib)
- 计算机图形学实验 西工大 林曾刚 C
- 2017山大软件学院计算机图形学考试题
- opengl自行车动画实验报告
- 计算机图形学报告
- Caley树算法 计算机图形学 孔令德 案例
- 多边形边缘填充算法 计算机图形学
- 研究生计算机图形学大作业
评论
共有 条评论