版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、虚拟现实与数据可视化课程作业 董元 22011207基于openGL的虚拟教室虚拟现实与数据可视化课程作业董元 22011207指导老师:孙立博老师仪器科学与工程学院 2013年12月16日一、 作业要求用openGL制作一个虚拟教室。要求视角可变化,教室里的物品不少于五件。二、 完成情况我的openGL虚拟教室完成情况如下:1、 绘制出的教室里的基本物体:黑板、讲台、投影仪、空调、门窗、音响、九张桌子、九张凳子等。虚拟教室整体看上去接近真实生活中的教室。2、 添加了灯光和纹理效果:门窗以及空调均是用纹理贴出来的。使教室看起来更加生动形象。3、 为教室加上了可用键盘控制的动态效果:可控制灯光亮
2、灭、投影仪收起放下、六块黑板的上下滑动以及音响的开关。4、 引用FMOD音乐引擎,为教室加上可控背景音效(即3中的音响开关)。5、 在输出窗口添加操作提示信息,使界面更加人性化。三、 成果演示1、整体效果图2、改变视角效果3、开灯关灯对比效果图未开灯时:开灯时:4、 投影仪放下效果图:5、黑板移动效果图6、局部细节效果图四、 内容介绍下面我将从代码的角度简单介绍一下我的整个教室程序。代码部分包括一个头文件(MyHeader.h)和一个cpp文件(main.cpp)。为了增加程序的可读性,我将相关的变量定义、函数声明等集中放置在头文件下面。在我的全部代码中,除了主函数外,共定义了19个子函数。如
3、下图所示:主程序部分和一般的openGL程序一样,完成初始化、窗口的绘制、显示回调函数和键盘以及一些特殊事件的响应。主函数如下:初始化部分由函数init()完成,而init中又调用了进行灯光初始化的函数initlight()以及进行纹理图像载入的LoadTexture1()、LoadTexture2()、LoadTexture3()。这主要是因为灯光初始化和载入纹理相关代码较多,这么做是为了使代码看上去更加层次分明绘制教室的工作由回调函数display()完成。而所有子函数中与绘制教室相关的子函数还有DrawRoom()、DrawDesk()、DrawBlackboard()以及Drawoth
4、erthings();分别完成教室墙面、黑板、桌椅及其他物体的绘制。其中,整个教室空间有六个大矩形拼接而成;桌椅由梯形不一的长方体拼接而成。可以这样说,整个教室基本上都是由不同的立方体和矩形构成的。所以从这一点上来说,绘制教室并没有使用任何复杂的openGL内置函数。响应按键主要是由OnKeyboard()和OnSpecial()完成的。OnSpecia()函数其实只是响应退出窗口的ECS键,为了从逻辑上区分这一事件与普通按键响应的不同,我把响应这一事件的代码放在了OnSpecia()函数下。而其他响应普通事件的代码则在OnKeyboard()下。而普通事件的响应程序,又调用到了函数InitF
5、MOD(),(响应播放音乐),函数projector_dispaly1()、projector_dispaly2(),(响应投影仪的放下与收起,实质是在对窗口的重新绘制时改变投影仪的相关参数)。五、 收获感想1、对于任何一种编程语言或者是API,当我们在使用它们编程时,都首先要对其基本原理有一个最基本的认识。贸然地调用函数或是凭感觉去编程,往往会造成不可预知的错误。而且一旦错误发生,往往很难解决。在程序的编写过程中,最开始时对openGL了解甚少,在参考示例程序时移植他人的代码往往很难产生自己希望的效果,就是这个道理。而且,在编写整个程序的过程中,出现过一个我一直无法解决的问题:通过编译后程序
6、运行一段时间自己会卡死。在请教了老师以后才知道,该问题出现的原因是我把载入纹理的代码放在了显示回调函数中,这样一来每一次重新绘制窗口,程序都会开辟新的内存用以储存相关信息。因此程序运行一段时间之后内存不足,便会报错。这个问题是我自己很难考虑到的,这也是让我认识到自己对程序的基本理解的不足,这方面需要进一步加强。2、我觉得这次作业给我带来最大的收获就是它起到了一个抛砖引玉的效果。虚拟教室的创立不仅让我对openGL这个图像程序接口产生了很大的兴趣,也让我对虚拟现实技术产生了更多的期待。而且,在编写程序的过程中我又接触到一个有趣的音乐引擎FMOD。这些都让我觉得这门课程的学习妙趣横生。虽然我在这个
7、作业上花费了很多时间,但是收获了很多乐趣。3、在编写程序的过程中,我进一步意识到网络这个公开平台资源的强大。在自学的过程中,别人的经验给了我许多启发。网络上许多达人开放式的共享资源的态度值得我们学习。互联网的发展为打开了巨大的学习空间,而在未来的学习生活中,我想我也会秉承这样一种开源共享的态度,学习知识,并且传播知识。六、 附录(一) 参考书目1Mason Woo Jakie Neider Tom Davis Dave Shreiner/著 吴斌 段海波 薛凤舞/译openGL编程权威指南中国电力出版社2网络资源:Nehe的中文openGL教程 (二)代码1、main.cpp#include&
8、lt;glut.h>#include<stdlib.h>#include <GLAux.h>#include<iostream>#include<math.h>#include"MyHeader.h" /相关变量和函数定义放入头文件中,增加程序可读性#include "fmod.h"/ 音频库的头文件#pragma comment(lib, "fmodvc.lib")/ 把音频库加入到链接器中#pragma comment(lib, "GLAux.lib")#p
9、ragma warning(disable:4996) /强制忽略VS2012对于老版本一些函数不安全的警告using namespace std;FSOUND_SAMPLE * handle1;int main(int argc, char * argv)Eye.x = 0.0f;/f代表这个数据是GLfloat类型的常量Eye.y = 0.0f;Eye.z = 18.0f;glutInit(&argc,argv);/对glut进行初始化glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);/指定glutInitWindow
10、Size(700,600);/窗口大小,以像素为单位窗glutInitWindowPosition(650,100);/口左上角的屏幕位置glutCreateWindow(argv0);init();/初始化glutDisplayFunc(display);/显示回调函数glutReshapeFunc(reshape);glutKeyboardFunc(OnKeyboard);const GLubyte* test=glGetString(GL_EXTENSIONS);glutSpecialFunc(OnSpecial);glutIdleFunc(OnIdle);PrintInformatio
11、n();glutMainLoop();/调用来启动程序return 0;/*函数名称:LoadBitmap*函数作用:检查文件能否被正常打开,不能则返回一个空指针*/AUX_RGBImageRec *LoadBitmap(char *Filename)/ 声明一个文件句柄用于打开文件FILE *File=NULL;/ 文件名不能空if (!Filename)return NULL;/ 以只读方式打开文件测试文件是否能够打开File=fopen(Filename,"r");/ 文件是否存在if (File)/ 存在,则关闭文件fclose(File);/ 装入测试过已存在的文
12、件return auxDIBImageLoad(Filename);/ 文件装入失败,返回NULLreturn NULL;/*函数名称:LoadTexture1*函数作用:装入位图文件并作为纹理贴图*/int LoadTexture1()int Status=FALSE;AUX_RGBImageRec *TextureImage=0;glGenTextures(1, &texture0);if (TextureImage=LoadBitmap("Images6.bmp")Status=TRUE;glBindTexture(GL_TEXTURE_2D, texture
13、0);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);if (TextureImage)/ 释放资源if (Textu
14、reImage->data)free (TextureImage->data);free(TextureImage);return Status;/*函数名称:LoadTexture2*函数作用:装入位图文件并作为纹理贴图*/int LoadTexture2()int Status=FALSE;AUX_RGBImageRec *TextureImage=0;glGenTextures(2, &texture1);if (TextureImage=LoadBitmap("Images0.bmp")Status=TRUE;glBindTexture(GL_T
15、EXTURE_2D, texture1);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);if (TextureIma
16、ge)/ 释放资源if (TextureImage->data)free (TextureImage->data);free(TextureImage);return Status;/*函数名称:LoadTexture3*函数作用:装入位图文件并作为纹理贴图*/int LoadTexture3()int Status=FALSE;AUX_RGBImageRec *TextureImage=0;glGenTextures(1, &texture2);if (TextureImage=LoadBitmap("Images1.bmp")Status=TRUE;
17、glBindTexture(GL_TEXTURE_2D, texture2);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINE
18、AR);if (TextureImage)/ 释放资源if (TextureImage->data)free (TextureImage->data);free(TextureImage);return Status;/*函数名称:LoadTexture4*函数作用:装入位图文件并作为纹理贴图*/int LoadTexture4()int Status=FALSE;AUX_RGBImageRec *TextureImage=0;glGenTextures(1, &texture3);if (TextureImage=LoadBitmap("Images2.bmp&
19、quot;)Status=TRUE;glBindTexture(GL_TEXTURE_2D, texture3);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_
20、MAG_FILTER,GL_LINEAR);if (TextureImage)/ 释放资源if (TextureImage->data)free (TextureImage->data);free(TextureImage);return Status;/*函数名称:intlight*函数作用:初始化灯光设置*/void initlight(void) glLightModelfv(GL_LIGHT_MODEL_AMBIENT,model_ambient);glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);glMaterialfv
21、(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);glLightfv(GL_LIGHT0,GL_POSITION,light_position0);glLightfv(GL_LIGHT0,GL_AMBIENT,mat_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);glLightfv(GL_LIGHT6,GL_POSITION,
22、light_position6);glLightfv(GL_LIGHT6,GL_AMBIENT,mat_ambient);glLightfv(GL_LIGHT6,GL_DIFFUSE,white_light);glLightfv(GL_LIGHT6,GL_SPECULAR,white_light);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_COLOR_MATERIAL);/*函数名称:init*函数作用:初始化设置*/void init(void)glClearColor(0,0,0,0);glEnable(GL_TEXTURE
23、_2D);glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);LoadTexture1();initlight();glShadeModel(GL_SMOOTH);glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);/指定材料着色的面glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);/指定材料对镜面光的反射glEnable(GL_DEPTH_TEST);/LoadTexture1();/载入纹理1LoadTexture2();/载入纹理
24、2LoadTexture3();/载入纹理3LoadTexture4();/载入纹理4/*函数名称:DrawRoom*函数作用:绘制教室墙面以及两侧石柱*/void DrawRoom()glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse1);glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);glMaterialfv(GL_FRON
25、T, GL_EMISSION, no_mat);/-开始绘制房间-glColor3f(0.8f, 1.0f, 0.8f);glBegin(GL_QUADS); /glNormal3f用于定义点的法向量glNormal3f(0.0f, 1.0f, 0.0f);/绘制地板glVertex3f(-50.0f, -30.0f, -80.0f);glVertex3f(-50.0f, -30.0f, 20.0f);glVertex3f( 50.0f, -30.0f, 20.0f);glVertex3f( 50.0f, -30.0f, -80.0f);glEnd();glBegin(GL_QUADS); g
26、lColor3f(0.3,0.3,0.3);glNormal3f(0.0f, -1.0f, 0.0f);/绘制天花板glVertex3f(-50.0f, 30.0f, 20.0f);glVertex3f(-50.0f, 30.0f, -80.0f);glVertex3f( 50.0f, 30.0f, -80.0f);glVertex3f( 50.0f, 30.0f, 20.0f);glEnd(); glColor3f(0.8f,0.8f, 0.8f);glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f, 1.0f);/绘制后墙面glVertex3f(-50.0f,
27、30.0f, -80.0f);glVertex3f(-50.0f, -30.0f, -80.0f);glVertex3f( 50.0f, -30.0f, -80.0f);glVertex3f( 50.0f, 30.0f, -80.0f);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f, -1.0f);/绘制前墙面glVertex3f( 50.0f, 30.0f, 20.0f);glVertex3f( 50.0f, -30.0f, 20.0f);glVertex3f(-50.0f, -30.0f, 20.0f);glVertex3f(-50.0f,
28、 30.0f, 20.0f);glEnd();glBegin(GL_QUADS);glNormal3f( 1.0f, 0.0f, 0.0f);/绘制左墙面glVertex3f(-50.0f, 30.0f, 20.0f);glVertex3f(-50.0f, -30.0f, 20.0f);glVertex3f(-50.0f, -30.0f, -80.0f);glVertex3f(-50.0f, 30.0f, -80.0f);glEnd();glBegin(GL_QUADS);glNormal3f(-1.0f, 0.0f, 0.0f);/绘制右墙面glVertex3f( 50.0f, 30.0f,
29、 -80.0f);glVertex3f( 50.0f, -30.0f, -80.0f);glVertex3f( 50.0f, -30.0f, 20.0f);glVertex3f( 50.0f, 30.0f, 20.0f);glEnd();/-绘制房间结束-/-开始绘制房间两侧石柱-/int j=0;for(;j<2;j+)/绘制教室右侧的石柱glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f, -1.0f);/石柱后面glVertex3f( 50.0f, 30.0f, -40.0f+j*30);glVertex3f( 47.0f, 30.0f, -40.0f+
30、j*30);glVertex3f( 47.0f, -30.0f, -40.0f+j*30);glVertex3f( 50.0f, -30.0f, -40.0f+j*30);glEnd();glBegin(GL_QUADS);glNormal3f(-1.0f, 0.0f, 0.0f);/石柱左面glVertex3f( 47.0f, 30.0f, -40.0f+j*30);glVertex3f( 47.0f, 30.0f, -36.0f+j*30);glVertex3f( 47.0f, -30.0f, -36.0f+j*30);glVertex3f( 47.0f, -30.0f, -40.0f+j
31、*30);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f, 1.0f);/石柱前面glVertex3f( 50.0f, 30.0f, -36.0f+j*30);glVertex3f( 47.0f, 30.0f, -36.0f+j*30);glVertex3f( 47.0f, -30.0f, -36.0f+j*30);glVertex3f( 50.0f, -30.0f, -36.0f+j*30);glEnd();for( j=0;j<3;j+)/绘制教室左侧石柱glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f,
32、-1.0f);/石柱后面glVertex3f( -50.0f, 30.0f, -40.0f+j*28);glVertex3f( -47.0f, 30.0f, -40.0f+j*28);glVertex3f( -47.0f, -30.0f, -40.0f+j*28);glVertex3f( -50.0f, -30.0f, -40.0f+j*28);glEnd();glBegin(GL_QUADS);glNormal3f(1.0f, 0.0f, 0.0f);/石柱右面glVertex3f( -47.0f, 30.0f, -40.0f+j*28);glVertex3f( -47.0f, 30.0f,
33、 -36.0f+j*28);glVertex3f( -47.0f, -30.0f, -36.0f+j*28);glVertex3f( -47.0f, -30.0f, -40.0f+j*28);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f, 0.0f, 1.0f);/石柱前面glVertex3f( -50.0f, 30.0f, -36.0f+j*28);glVertex3f( -47.0f, 30.0f, -36.0f+j*28);glVertex3f( -47.0f, -30.0f, -36.0f+j*28);glVertex3f( -50.0f, -30
34、.0f, -36.0f+j*28);glEnd();/-结束绘制房间两侧石柱-/*函数名称:DrawDesk*函数作用:绘制教室里的九张桌子和就张凳子*/void DrawDesk()GLuint i=0;for(;i<3;i+)glPushMatrix();/-no.1-glColor3f(1,1,0.45);/桌子上面glTranslatef(15.0f,-10.0f,-30.0+i*17);/glScalef(13.0f,0.3f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_am
35、b_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子下面glTranslatef(15.0f,-13.0f,-30.0+i*17);/glScalef(11.0f,0.3f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子后面g
36、lTranslatef(15.0f,-12.0f,-32.5f+i*17);/从原点平移glScalef(11.0f,3.0f,0.3f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子左面glTranslatef(9.5f,-11.5f,-30.0f+i*17);/从原点平移glScalef(0.3f,3.0f,5.0f);/将立方体变成长方
37、体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子右面glTranslatef(20.5f,-11.5f,-30.0f+i*17);/从原点平移glScalef(0.3f,3.0f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSoli
38、dCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌腿一号glTranslatef(10.0f,-17.0f,-32.5f+i*17);/从原点平移glScalef(0.5f,8.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌腿二号glTranslatef(
39、10.0f,-17.0f,-28.5f+i*17);/从原点平移glScalef(0.5f,8.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌腿三号glTranslatef(20.0f,-17.0f,-32.5f+i*17);/从原点平移glScalef(0.5f,8.0f,0.5f);/将立方体变成长方体glMaterialf
40、v(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌腿四号glTranslatef(20.0f,-17.0f,-28.5f+i*17);/从原点平移glScalef(0.5f,8.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);g
41、lPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/板凳上面glTranslatef(15.0f,-15.0f,-25.0+i*17);/从原点平移glScalef(9.5f,0.3f,3.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/板凳腿一号glTranslatef(11.0f,-18.0f
42、,-26.0f+i*17);/从原点平移glScalef(0.5f,6.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/板凳腿二号glTranslatef(11.0f,-18.0f,-24.0f+i*17);/从原点平移glScalef(0.5f,6.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_
43、AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/板凳腿三号glTranslatef(19.0f,-18.0f,-26.0f+i*17);/从原点平移glScalef(0.5f,6.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix
44、();glPushMatrix();glColor3f(1,1,0.45);/板凳腿四号glTranslatef(19.0f,-18.0f,-24.0f+i*17);/从原点平移glScalef(0.5f,6.0f,0.5f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();/-no.2-glColor3f(1,1,0.45);/桌子上面glTranslatef(0.0f,-10.0f,-3
45、0.0+i*17);/从原点平移glScalef(13.0f,0.3f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子下面glTranslatef(0.0f,-13.0f,-30.0+i*17);/从原点平移glScalef(11.0f,0.3f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_B
46、ACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子后面-32.5glTranslatef(0.0f,-12.0f,-32.5f+i*17);/从原点平移glScalef(11.0f,3.0f,0.3f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix(
47、);glPushMatrix();glColor3f(1,1,0.45);/桌子左面glTranslatef(-5.4f,-11.5f,-30.0f+i*17);/从原点平移glScalef(0.3f,3.0f,5.0f);/将立方体变成长方体glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);glutSolidCube(1.0);glPopMatrix();glPushMatrix();glColor3f(1,1,0.45);/桌子右面glTranslatef(5.4f,-11.5f,-30.0f+i*17);/从原点平移glScalef(0.3f,3.0f,5.0f);/将立方体变成长方体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年唐山幼儿师范高等专科学校单招综合素质考试题库附答案详解(综合卷)
- 2026年四川交通职业技术学院单招职业技能考试题库及答案详解(网校专用)
- 2026年四川体育职业学院单招职业技能考试题库含答案详解(b卷)
- 2026年四川体育职业学院单招职业适应性测试题库及一套完整答案详解
- 商业地产行业市场研究
- 中耳炎的药物研发动态
- 2025制造业数字化转型发展报告
- 儿科引流管护理要点
- 化疗药物过敏反应的应急处理
- 2026河南郑州十一中教育集团郑东校区(86中)招聘笔试备考题库及答案解析
- 120调度员基础知识课件
- 磷石膏无害化治理和综合利用项目可行性研究报告方案
- 校园快递外卖管理制度
- 2025年7月辽宁省普通高中学业水平合格性考试生物试题(原卷版)
- 2025年三轮电动车项目市场调查研究报告
- 医用化学(第三版)课件 -第14章 醇酚醚
- 儿童除颤课件
- (北京科电)GEX-2000技术使用说明(出版)
- 供电所所长讲安全课
- 医院感染管理办法全文
- 国家职业技术技能标准 X2-10-07-17 陶瓷产品设计师(试行)劳社厅发200633号
评论
0/150
提交评论