计算机图形学报告.docx
- 文档编号:9000164
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:489.11KB
计算机图形学报告.docx
《计算机图形学报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学报告.docx(14页珍藏版)》请在冰豆网上搜索。
计算机图形学报告
计算机图形学(2017年秋季学期)
序号:
实验报告
系别:
计算机科学与技术
班级:
姓名:
学号:
实验名称:
2-真实感图形绘制
总成绩:
评语:
日期:
《计算机图形学》实验报告
实验名称
真实感图形绘制
实验序号
2
实验日期
2017.12.13
实验人
一、实验目的、要求与环境
1.目的:
通过实验,学生应掌握通过计算机程序进行真实感图形绘制的基本原理,特别是对三维显示对象进行纹理映射的基本方法,将理论和实际应用切实结合起来。
2.要求:
对一个三维立方体进行旋转,对其6个不同的面进行6个不同图像的纹理映射,并进行投影变换与显示,分析增强后的视觉效果,提交实验报告。
3.环境:
Windows7操作系统
MicrosoftVisualStudio2005
OpenGL函数库
4.自带位图文件(换成你自己的图像文件):
二、实验内容与步骤
1.准备相关图像文件。
2.进行立方体各面图像与旋转速度的大体设计。
3.在Windows7操作系统上,打开MicrosoftVisualStudio2005,编写相关程序,完成程序主体框架结构。
4.编写六面体显示相关的程序代码。
5.编写六面体旋转相关的程序代码。
6.编写深度检测相关的程序代码。
7.编写纹理载入功能的相关程序代码。
8.编写纹理参数定义功能的相关程序代码。
9.编写纹理映射功能的相关程序代码。
10.对程序进行相关调试,修改程序,去除其中的BUG。
11.观察纹理映射后的六面体的旋转显示,与预想的结果进行对比,修改相关程序参数。
12.截屏,保留实验结果,进行实验结果分析,并撰写实验报告。
三、相关背景知识
1.图像读取可能需要的数据结构:
FILE*fp
BITMAPFILEHEADERbmpFH;
BITMAPINFOHEADERbmpIH;
unsignedchartemp;
2.文件打开的语句例句:
fp=fopen(fileName,"rb");
3.读文件头的语句例句:
fread((void*)&bmpFH,sizeof(BITMAPFILEHEADER),1,fp);
4.读信息头的语句例句:
fread((void*)&bmpIH,sizeof(BITMAPINFOHEADER),1,fp);
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,
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()
四、编译过程截图
五、实验结果与分析
(下面是一个例子,换上你自己的图)
实验结果:
实验分析
程序通过glBindTexture(GL_TEXTURE_2D,lastTextureID);语句,完成了恢复之前的纹理绑定功能。
程序的运行结果,是一个每个面都有图片的立方体旋转
程序通过t1=load_texture("01.bmp")语句,完成了加载纹理功能。
程序通过glutDisplayFunc(&display);。
语句,完成了注册函数功能。
程序通过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,&texture_ID);语句,完成了分配一个新的纹理编号功能。
六、程序源代码
#include
#include
#include
#include
#include
#include
#include"glaux.h"
#pragmacomment(lib,"glaux.lib")
#defineGL_GENERATE_MIPMAP0x8191
//纹理图像数据
unsignedchar*pBitmapData;
intwidth;
intheight;
GLuinttexture_id[6];
AUX_RGBImageRec*pImage;
//<<<<<<<<<<<<<<<<<<<<<<
voidmyInit(void)//我的初始化程序
{
glEnable(GL_DEPTH_TEST);//允许深度测试
glClearColor(1.0,1.0,1.0,0.0);//设置背景色为白色
glMatrixMode(GL_PROJECTION);//设置投影矩阵为当前矩阵
glLoadIdentity();//载入单位矩阵
gluPerspective(75.0,800.0/600.0,0.01,100.0);//设置视景体
gluLookAt(5,5,5,0,0,0,0,1,0);//设置视点位置
glMatrixMode(GL_MODELVIEW);//设置模型视点矩阵为当前矩阵
glLoadIdentity();//载入单位矩阵
glViewport(0,0,640,480);//设置视口
//启用二维文理
glEnable(GL_TEXTURE_2D);
//getatextureid
glGenTextures(6,texture_id);//生成纹理索引
//loaddata0======================================================================
pImage=auxDIBImageLoadA("1.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[0]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//loaddata1======================================================================
pImage=auxDIBImageLoadA("2.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[1]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//loaddata2======================================================================
pImage=auxDIBImageLoadA("3.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[2]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//loaddata3======================================================================
pImage=auxDIBImageLoadA("4.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[3]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//loaddata4======================================================================
pImage=auxDIBImageLoadA("5.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[4]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//loaddata5======================================================================
pImage=auxDIBImageLoadA("6.bmp");//载入纹理图像文件
//bindandpasstexuredataintoopenGL
glBindTexture(GL_TEXTURE_2D,texture_id[5]);//设定当前纹理
//setparameterstomakemipmaps
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置纹理放大映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);//设置纹理缩小映射的滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);//开启硬件加速
//createthetextures
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
}
//<<<<<<<<<<<<<<<<<<<<<<<
//theredrawfunction
voidmyDisplay(void)//我的显示程序
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色与深度缓冲区
glRotatef(0.5,1.5,1.7,5);//绕轴旋转一个角度
glRotatef(1,0,0,1);
glBindTexture(GL_TEXTURE_2D,texture_id[0]);//设置当前纹理=================================================
//glColor4f(0,1,0,0.1);
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();
glBindTexture(GL_TEXTURE_2D,texture_id[1]);//设置当前纹理=================================================
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();//绘制结束
glBindTexture(GL_TEXTURE_2D,texture_id[2]);//设置当前纹理=================================================
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();//绘制结束
glBindTexture(GL_TEXTURE_2D,texture_id[3]);//设置当前纹理=================================================
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();//绘制结束
glBindTexture(GL_TEXTURE_2D,texture_id[4]);//设置当前纹理=================================================
glBegin(GL_QUADS);//开始绘制边形
glTexCoord2f(0.0,0.0);glVertex3f(-2.0,-2.0,2.0);//给出端点空间位置与纹理端点位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 报告