资源描述:
《电子科大实验4-三维图形程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告课程名称:三维图形设计学 院:计算机科学与工程专 业:计算机科学与技术指导教师:周川学生姓名:学 号:实验成绩:日 期: 2014 年 5月 26日电子科技大学计算机学院实验中心电子科技大学实验报告一、实验四:OpenGL纹理映射编程实验二、实验室名称:主楼A2-412实验时间:2014年5月26日三、实验目的:1、理解OpenGL纹理映射的相关原理;2、掌握与纹理映射相关的OpenGLAPI函数及其用法;3、熟悉纹理映射设置的基本步骤。四、实验原理:1.openGL图形编程技术原理2.纹理映
2、射、纹理参数设置、纹理坐标的自动生成、纹理对象、数字纹理、图片纹理、光照、变换、菜单。3.BMP知识:【基本组成】BMP文件是windows采用的图形文件格式,以像素为基本单位。一般由4部分组成,位图文件头,位图信息头,彩色表(24位不用彩色表),图像数据。【解码相关】1)windows.h中有BITMAPFILEHEADER和BITMAPINFOHEADER表示位图文件头和位图信息头。2)一般BMP的24位图像是以BGR存储的,处理时需要注意。3)一般BMP图像是从下到上,从左到右进行描述;PHOTOSHOP中有翻
3、转行序(fliprowover),采用了解码方便的从上到下从左到右描述,但处理时必须注意图像数据是相反的,高度是负值。4)如果一个图像水平线字节数不是4的倍数,这行就用空字节补齐,通常是ASCII0。4.gluBuild2DMipmaps对BMP图片要求很低,任意大小都行,但是不太稳定。glTexImage2D支持64,128,256分辨率BMP,其他大小的可能会出现问题,稳定。五、实验内容:(一)编程任务1——绘制一个具有纹理和光照的房间为在第三次实验中生成的房间(如上图)添加数字图像生成的纹理。要求:1、使用纹理
4、对象;2、墙壁、地板和天花板的数字图像生成的纹理要不相同;3、屋内至少有一个点光源;4、可用右键菜单交互式的开启或关闭场景光照和纹理;5、可用右键菜单设置纹理环境(GL_REPLACE和GL_MODULATE)。分析这两种方式中哪种适宜于有光照的环境下。(二)编程任务2——绘制一个具有背景纹理的钟表为在第二次次实验中生成的钟表上添加数字图像生成的纹理或者图片纹理。六、实验器材(设备、元器件):电脑型号戴尔SystemInspironN4110笔记本电脑操作系统Windows8专业版64位(DirectX11)软件环境
5、MicrosoftVisualStudioExpress2012forWindowsDesktopOpenGLGlut3.7七、实验步骤:1.利用第三次实验的光照房间,去除多余功能。2.用纹理对象和数字纹理进行贴图。3.利用第二次实验的钟表,去除多余功能。4.用纹理对象和如下BMP图片纹理进行贴图(PSCS6生成,大小480×480px,24位位图)。BMP贴图图片(G://clockbg.bmp)BMP格式参数(无翻转行序)八、实验数据及结果分析:(一)纹理房间1.代码:#include#in
6、clude#defineW500//窗口宽#defineH500//窗口高//材质属性结构定义typedefstructmatattr{GLfloatambient[4];GLfloatdiffuse[4];GLfloatspecular[4];GLfloatshininess;}matattr;//各种材质数据设置matattrball={{0.2,0.3,0.3,1.0},{0.3,0.3,0.85,1.0},{0.5,0.5,0.81,1.0},50.0};matattrcone={{0.3,
7、0.0,0.0,1.0},{0.6,0.0,0.0,1.0},{0.8,0.6,0.6,1.0},50.0};matattrwall={{0.2,0.5,0.5,1.0},{0.2,0.5,0.5,1.0},{0.9,0.9,0.9,1.0},100.0};matattrceiling={{0.5,0.5,0.7,1.0},{0.5,0.5,0.9,1.0},{0.9,0.9,0.9,1.0},100.0};matattrground={{0.9,0.0,0.4,1.0},{0.9,0.0,0.4,1.0},{0.9
8、,0.9,0.9,1.0},100.0};matattrlight={{1.0,1.0,0.1,1.0},{1.0,1.0,0.1,1.0},{0.8,0.8,0.2,1.0},50.0};//0光照(点光源)属性GLfloatposition0[]={-2.0,3.0,8.0,1.0};GLfloatambient0[]={0.1,0.1,0