计算机图形学报告材料.docx

上传人:b****5 文档编号:7857946 上传时间:2023-01-26 格式:DOCX 页数:14 大小:489.18KB
下载 相关 举报
计算机图形学报告材料.docx_第1页
第1页 / 共14页
计算机图形学报告材料.docx_第2页
第2页 / 共14页
计算机图形学报告材料.docx_第3页
第3页 / 共14页
计算机图形学报告材料.docx_第4页
第4页 / 共14页
计算机图形学报告材料.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机图形学报告材料.docx

《计算机图形学报告材料.docx》由会员分享,可在线阅读,更多相关《计算机图形学报告材料.docx(14页珍藏版)》请在冰豆网上搜索。

计算机图形学报告材料.docx

计算机图形学报告材料

计算机图形学(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//useasneededforyoursystem

#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);//给出端点空间位置与纹理端

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1