计算机图形学报告
计算机图形学计算机图形学 (2017 (2017 年秋季学期年秋季学期) ) 序号: 实实验验报报告告 系别:计算机科学与技术系别:计算机科学与技术 班级:班级: 姓名:姓名: 学号:学号: 实验名称:实验名称:2-2-真实感图形绘制真实感图形绘制 总成绩:总成绩: 评语:评语: 日期:日期: NORTH CHINA UNIVERSITY OF TECHNOLOGYNORTH CHINA UNIVERSITY OF TECHNOLOGY 《计算机图形学》实验报告《计算机图形学》实验报告 实验名称实验名称 实验日期实验日期 真实感图形绘制真实感图形绘制 2017.12.132017.12.13 实验序号实验序号 实验人实验人 2 2 一、实验目的、要求与环境一、实验目的、要求与环境 1.目的:通过实验,学生应掌握通过计算机程序进行真实感图形绘制的基本原 理,特别是对三维显示对象进行纹理映射的基本方法,将理论和实际应用切实结合起 来。 2.要求:对一个三维立方体进行旋转,对其6 个不同的面进行 6 个不同图像的纹 理映射,并进行投影变换与显示,分析增强后的视觉效果,提交实验报告。 3.环境:Windows 7 操作系统 Microsoft Visual Studio 2005 OpenGL 函数库 4. 自带位图文件(换成你自己的图像文件): 二、实验内容与步骤二、实验内容与步骤 1. 准备相关图像文件。 2. 进行立方体各面图像与旋转速度的大体设计。 3.在 Windows 7 操作系统上,打开 Microsoft Visual Studio 2005,编写相关 程序,完成程序主体框架结构。 4.编写六面体显示相关的程序代码。 2022-4-262/12 NORTH CHINA UNIVERSITY OF TECHNOLOGYNORTH CHINA UNIVERSITY OF TECHNOLOGY 5.编写六面体旋转相关的程序代码。 6.编写深度检测相关的程序代码。 7. 编写纹理载入功能的相关程序代码。 8. 编写纹理参数定义功能的相关程序代码。 9. 编写纹理映射功能的相关程序代码。 10.对程序进行相关调试,修改程序,去除其中的 BUG。 11. 观察纹理映射后的六面体的旋转显示,与预想的结果进行对比,修改相关程 序参数。 12.截屏,保留实验结果,进行实验结果分析,并撰写实验报告。 三、相关背景知识三、相关背景知识 1.图像读取可能需要的数据结构: FILE* fp BITMAPFILEHEADER bmpFH; BITMAPINFOHEADERbmpIH; unsigned chartemp; 2.文件打开的语句例句: fp = ( fileName, “rb“ ); 3.读文件头的语句例句: fread( ( void * ) 4.读信息头的语句例句: fread( ( void * ) 5.文件指针移动的语句例句: fseek( fp, bmpFH.bfOffBits, SEEK_SET ); 6.读图像 RGB 数据的语句例句: fread( ( void * )pBitmapData, 1, bmpIH.biSizeImage, fp ); 7.启用二维纹理的语句例句: glEnable( GL_TEXTURE_2D ); 8.产生纹理索引的语句例句: glGenTextures( 6, texture_id ); 9.进行纹理绑定的语句例句: glBindTexture( GL_TEXTURE_2D, texture_id[0] ); 10. 设置纹理放大的滤波参数的语句例句: glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR ); 11. 设置纹理缩小的滤波参数的语句例句: glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); 12. 设置纹理映射硬件加速的语句例句: glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 13. 生成纹理的语句例句: glTexImage2D( GL_TEXTURE_2D, 0, 2022-4-263/12 NORTH CHINA UNIVERSITY OF TECHNOLOGYNORTH CHINA UNIVERSITY OF TECHNOLOGY GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pBitmapData ); 14. 进行纹理映射的语句例句: glBegin( GL_QUADS ); glTexCoord2f( 0.0, 0.0 );glVertex3f( -2.0, -2.0, -2.0 ); glTexCoord2f( 1.0, 0.0 );glVertex3f( -2.0,2.0, -2.0 ); glTexCoord2f( 1.0, 1.0 );glVertex3f(2.0,2.0, -2.0 ); glTexCoord2f( 0.0, 1.0 );glVertex3f(2.0, -2.0, -2.0 ); glEnd() 四、编译过程截图四、编译过程截图 五、实验结果与分析五、实验结果与分析 (下面是一个例子,换上你自己的图) 实验结果:实验结果: 2022-4-264/12 NORTH CHINA UNIVERSITY OF TECHNOLOGYNORTH CHINA UNIVERSITY OF TECHNOLOGY 实验分析实验分析 程序通过 glBindTexture(GL_TEXTURE_2D, lastTextureID);语句,完成了恢复之 前的纹理绑定功能。 程序的运行结果,是一个每个面都有图片的立方体旋转 程序通过 t1 = load_texture(“01.bmp“)语句,完成了加载纹理功能。 程序通过 glutDisplayFunc(。语句,完成了注册函数功能。 程序通过 glutMainLoop();语句,完成了循环调用功能。 程序通过 glRotatef(angle, 0.0f, 0.0f, 1.0f);语句,完成了旋转功能。 程序通过 glEnable(GL_TEXTURE_2D);语句,完成了启用纹理功能。 程序通过 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);语句,完 成了设置视角功能。 程序通过 gluScaleImage(GL_RGB,语句,完成了进行像素缩放功能。 程序通过 nTexturesglGe(1, 语句,完成了分配一个新的纹理编号 功能。 六、程序源代码六、程序源代码 #include // use as needed for your system #include #include #include #include 2022-4-265/12 NORTH CHINA UNIVERSITY