




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学院姓名:专业 班学号教师评定:#i nclude #include #in elude #i nclude #in elude /将glaux.lib连接到工程/枚举鼠标变量#pragma comme nt(lib,glaux.lib) enumBUTTON_LEFT ,/ 鼠标左键;int mButt on = -1;int mOldY, mOldX;float z=0,c=0;float eye3 = 0.0f, 0.0f, 2.0f;/ 观察视角float rot3 = 45.0f, 45.0f, 0.0f; / 旋转变量const int GL_WIN_WIDTH = 800;窗口大
2、小const int GL_WIN_HEIGHT = 600;const int GL WIN INITIAL X = 0;const int GL_WINNITIAL_Y = 0;const int n = 1000,m=20;const float R = 1.2f,r=0.15f; 半径const float Pi = 3.1415926536f;GLuint g_TexturesArray7; 纹理指针int iMode=1;void ProcessMenu(int value)/ 弹出处理函数 iMode=value;glutPostRedisplay(); 强制刷新显示 void
3、CreatePopMenu()生成弹出式菜单函数 int nMainMenu;主菜单变量n Mai nMenu=glutCreateMe nu(ProcessMe nu);生成一个主菜单并指定菜单处理函数glutAddMenuEntry(填充,1);添加一个主菜单glutAddMenuEntry(轮廓,2);添加一个主菜单glutAttachMe nu(GLUT_RIGHT_BUTTON); 指定激活菜单的鼠标右键 bool LoadBMP(char *filename, GLuint &texture)/调贴图大小为 2 的幕AUX_RGBImageRec *pImage = NULL;pI
4、mage = auxDIBImageLoad(file name); /装入位图 if(pImage = NULL) return false; / 位图没装入返回错误 glGenTextures(1, &texture);/ 生成贴图(纹理)glBindTexture(GL_TEXTURE_2D,texture);捆绑贴图(纹理)gluBuild2DMipmaps(GL_TEXTURE_2D,4,建立图形plmage-sizeX,/ 图形宽 plmage-sizeXplmage-sizeY ,/ 图形高 plmage-sizeY ,GL_RGB, GL_UNSIGNED_BYTE, pIma
5、ge-data/ 图形数据);/释放位图数据占据的内存资源/返回成功free(pImage-data); free(pImage); return true; void Init()glE nable(GL_DEPTH_TEST);/ 开启深度缓冲glClearColor(0.0,0.0,0.0,1.0);glE nable(GL_TEXTURE_2D); / 启用二维文理/-载入图片LoadBMP(data/11.bmp,g_TexturesArray0);LoadBMP(data/12.bmp,g_TexturesArray1);LoadBMP(data/13.bmp,g_Textures
6、Array2);LoadBMP(data/14.bmp,g_TexturesArray3);LoadBMP(data/15.bmp,g_TexturesArray4);LoadBMP(data/16.bmp,g_TexturesArra y5);LoadBMP(data/17.bmp,g_TexturesArra y 6); void glutResize(int width, int height)/ 重置 OpenGL 窗口大小 glViewport(0, 0, width, height);/ 重置当前视口glMatrixMode(GL_PROJECTION);选择投影矩阵glLoadl
7、de ntity();/ 重置投影矩阵gluPerspective(45.0, (float)width/(float)height, 1.0, 300.0);/ 设置视口大小void glutDisplay(void)/ 显示函数glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);/ 表示物体的前向和后向面用填充面显示glPushMatrix(); 入栈glTra nslatef (-eye0, -eye1, -10);视口glBi ndTexture(GL_T
8、EXTURE_2D, g_TexturesArray0);/背景glBegi n(GL_QUADS);glTexCoord2f(1.0f, 0.0f);glVertex3f(8,-8,0);glTexCoord2f(1.0f, 1.0f);glVertex3f(8,8,0);glTexCoord2f(0.0f, 1.0f); glVertex3f(-8,8,0);glTexCoord2f(0.0f, 0.0f); glVertex3f(-8,-8,0); glE nd();glPopMatrix(); / 出栈glPushMatrix();入栈glTra nslatef (-eye0, -ey
9、e1, -eye2);glRotatef(rot0, 1.0f, 0.0f, 0.0f);glRotatef(rot1, 0.0f, 1.0f, 0.0f);glRotatef(rot2, 0.0f, 0.0f, 1.0f);/太阳if(iMode=1)GLUquadricObj * quadricl;建立一个曲面对象指针quadricl = gluNewQuadric();建立一个曲面对象指针gluQuadricTexture(quadric1,GLU_TRUE);/ 建立纹理坐标gluQuadricDrawStyle(quadric1,GLU_FILL);用面填充绘制场景glB in dT
10、exture(GL_TEXTURE_2D, g_TexturesArray1); 绑定纹理 gluSphere(quadric1,0.3f,64,64); 画一个填充太阳else if(iMode=2)glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glutWireSphere(0.3f,32,32); 画一个线条太阳glEnable(GL_TEXTURE_2D); 启用纹理/土星公转轨道glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glBegi n( GL_LINE_LO
11、OP);for(i nt j=0; j n; j+)glVertex3f(R*cos(2*Pi/n*j),0,R*si n(2*Pi/n*j);glE nd();glE nable(GL_TEXTURE_2D); 启用纹理/地球公转轨道glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glBegi n( GL_LINE_LOOP);for(j=0; j n; j+)glVertex3f(0.7*cos(2*Pi/n*j),0,0.7*si n(2*Pi/n*j);glE nd();glE nable(GL_TEXTURE_2D); 启用
12、纹理/ 土星glPushMatrix(); 入栈glRotatef(z, 0.0f, 1.0f, 0.0f);glTra nslatef (1.2, 0, 0);glPushMatrix();入栈glRotatef(c, 0.0f, 1.0f, 0.0f);glRotatef(90, 1.0f, 0.0f, 0.0f);if(iMode=1)GLUquadricObj * quadric2;/建立一个曲面对象指针quadric2 = gluNewQuadric();建立一个曲面对象指针gluQuadricTexture(quadric2,GLU_TRUE);建立纹理坐标gluQuadricDr
13、awStyle(quadric2,GLU_FILL);用面填充绘制场景glB in dTexture(GL_TEXTURE_2D, g_TexturesArray2);绑定纹理gluSphere(quadric2,0.12f,64,64); 画一个填充土星else if(iMode=2)glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glutWireSphere(0.12f,25,25); 画一个线条土星glEnable(GL_TEXTURE_2D); 启用纹理glPopMatrix(); / 出栈/土星一号卫星glPushMatri
14、x();/ 入栈glRotatef(c, O.Of, O.Of, 1.0f);gITra nslatef (0.25, 0, 0);if(iMode=1)GLUquadricObj * quadric3;/建立一个曲面对象指针quadric3 = gluNewQuadric();建立一个曲面对象指针gluQuadricTexture(quadric3,GLU_TRUE); / 建立纹理坐标 gluQuadricDrawStyle(quadric3,GLU_FILL);用面填充绘制场景glBi ndTexture(GL_TEXTURE_2D, g_TexturesArray3);绑定纹理gluS
15、phere(quadric3,0.03f,64,64); 画一个填充卫星else if(iMode=2)glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glutWireSphere(0.03f,25,25);/ 画一个线条卫星glEnable(GL_TEXTURE_2D); 启用纹理glPopMatrix();/ 出栈/土星一号卫星轨道glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glBegi n( GL_LINE_LOOP);for(j=0; j n; j+)glVert
16、ex3f(0.25*cos(2*Pi/n*j),0.25*si n(2*Pi/n*j),0);glE nd();glEnable(GL_TEXTURE_2D); / 启用纹理/ 土星二号卫星glPushMatrix(); / 入栈glRotatef(c, 1.0f, 0.0f, 0.0f);glTra nslatef (0, 0, 0.25);if(iMode=1)GLUquadricObj * quadric4;/建立一个曲面对象指针quadric4 = gluNewQuadric();建立一个曲面对象指针gluQuadricTexture(quadric4,GLU_TRUE); / 建立纹
17、理坐标 gluQuadricDrawStyle(quadric4,GLU_FILL);用面填充绘制场景glBi ndTexture(GL_TEXTURE_2D, g_TexturesArray4);绑定纹理gluSphere(quadric4,0.03f,64,64);/ 画一个填充卫星else if(iMode=2)glDisable(GL_TEXTURE_2D); 取消纹理glColor3f(1.0,1.0,1.0);glutWireSphere(0.03f,25,25); 画一个线条卫星glEnable(GL_TEXTURE_2D); 启用纹理glPopMatrix(); 出栈/土星二号
18、卫星轨道glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glBegi n( GL_LINE_LOOP);for(j=0; j n; j+)glVertex3f(0,0.25*cos(2*Pi/n*j),0.25*si n(2*Pi/n*j);glE nd();glE nable(GL_TEXTURE_2D); 启用纹理/ 土星的行星环glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);for(i nt i=0; im; i+) glBegi n(GL_LINE_LOOP);for
19、(i nt j=0; j n; j+) glVertex3f(r+i*0.004)*cos(2*Pi/n*j),0,( r+i*0.004)*si n(2*Pi/n*j); glE nd(); glEnable(GL_TEXTURE_2D); / 启用纹理 glPopMatrix();/ 出栈/地球glPushMatrix();/ 入栈glRotatef(z*2, 0.0f, 1.0f, 0.0f);glTra nslatef (0, 0, 0.7);glPushMatrix(); 入栈glRotatef(c, 0.0f, 1.0f, 0.0f);glRotatef(-90, 1.0f, 0.
20、0f, 0.0f);if(iMode=1)GLUquadricObj * quadric5; /建立一个曲面对象指针quadric5 = gluNewQuadric();建立一个曲面对象指针gluQuadricTexture(quadric5,GLU_TRUE); / 建立纹理坐标 gluQuadricDrawStyle(quadric5,GLU_FILL);用面填充绘制场景glBi ndTexture(GL_TEXTURE_2D, g_TexturesArray5);绑定纹理gluSphere(quadric5,0.1f,64,64); 画一个填充地球else if(iMode=2)glDi
21、sable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glutWireSphere(0.1f,25,25); 画一个线条地球glEnable(GL_TEXTURE_2D); 启用纹理glPopMatrix(); / 出栈/月亮glPushMatrix(); 入栈glRotatef(c, 1.0f, O.Of, 0.0f);glTra nslatef (0, 0, 0.15);if(iMode=1)GLUquadricObj * quadric6;/建立一个曲面对象指针quadric6 = gluNewQuadric();建立一个曲面对象指针gluQ
22、uadricTexture(quadric6,GLU_TRUE);/ 建立纹理坐标gluQuadricDrawStyle(quadric6,GLU_FILL);用面填充绘制场景glB in dTexture(GL_TEXTURE_2D, g_TexturesArray6);绑定纹理gluSphere(quadric6,0.025f,64,64); 画一个填充月亮else if(iMode=2)glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glutWireSphere(0.025f,25,25); 画一个线条月亮glEnable(GL
23、_TEXTURE_2D); 启用纹理glPopMatrix();/ 出栈/月亮轨道glDisable(GL_TEXTURE_2D); 取消纹理 glColor3f(1.0,1.0,1.0);glBegi n( GL_LINE_LOOP);for(j=0; j n; j+)glVertex3f(0,0.15*cos(2*Pi/n*j),0.15*si n(2*Pi/n*j);glE nd();glEnable(GL_TEXTURE_2D); / 启用纹理 glPopMatrix(); 出栈z+=0.05;c+=0.3;glPopMatrix(); 出栈glFlush();glutSwapBuffers(); void clamp(float *v)int i;for (i = 0; i 360 | vi -360) vi = 0;void glutMotion(int x, int y) / 图像移动函数if (mButton = BUTTON_LEFT)/按下左键时可以任意旋转图像rot0 -= (mOldY - y);rot1 -= (mOldX - x);clamp (rot);mOldX = x;mOldY = y;void glutMou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工个人工作总结(合集15篇)
- 2025反假货币考试题库及答案
- 名校集团管理办法
- 员工学习管理办法
- 商业安全管理办法
- 商会社会管理办法
- 商场店员管理办法
- 商户星级管理办法
- 啤酒储存管理办法
- 器材检验管理办法
- 神昏中医护理常规
- 现代家庭教育方法
- 肺炎患者的护理
- 站桩教学课件
- 2025年公务员考试时事政治模拟题附答案详解(模拟题)
- 2025年江苏省事业单位招聘考试教师招聘语文专业知识试卷(中学语文教师)
- 住院医师规范化培训教学病例讨论实施规范
- 2025-2030中国半导体产业链市场运行态势及前景展望与投资风险评估
- 2000-2015年考研英语一真题及详细解析
- 开关柜局部放电检测技术课件
- 联合国国际货物销售合同公约(中英文对照)
评论
0/150
提交评论