计算机图形学报告Word格式.docx

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

计算机图形学报告Word格式.docx

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

计算机图形学报告Word格式.docx

实验日期

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<

windows.h>

//useasneededforyoursystem

gl/Gl.h>

gl/glu.h>

gl/glut.h>

cstdio>

cstdlib>

#include"

glaux.h"

#pragmacomment(lib,"

glaux.lib"

#defineGL_GENERATE_MIPMAP0x8191

//纹理图像数据

unsignedchar*pBitmapData;

intwidth;

intheight;

GLuinttexture_id[6];

AUX_RGBImageRec*pImage;

//<

<

myInit>

>

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);

//设置模型视点矩阵为当前矩阵

glViewport(0,0,640,480);

//设置视口

//启用二维文理

//getatextureid

//生成纹理索引

//loaddata0======================================================================

pImage=auxDIBImageLoadA("

1.bmp"

//载入纹理图像文件

//bindandpasstexuredataintoopenGL

//设定当前纹理

//setparameterstomakemipmaps

//设置纹理放大映射的滤波方式

//设置纹理缩小映射的滤波方式

//开启硬件加速

//createthetextures

glTexImage2D(GL_TEXTURE_2D,0,3,pImage->

sizeX,pImage->

sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->

data);

//loaddata1======================================================================

2.bmp"

//bindandpasstexuredataintoopenGL

glBindTexture(GL_TEXTURE_2D,texture_id[1]);

//loaddata2======================================================================

3.bmp"

glBindTexture(GL_TEXTURE_2D,texture_id[2]);

//loaddata3======================================================================

4.bmp"

glBindTexture(GL_TEXTURE_2D,texture_id[3]);

//loaddata4======================================================================

5.bmp"

glBindTexture(GL_TEXTURE_2D,texture_id[4]);

//loaddata5======================================================================

6.bmp"

glBindTexture(GL_TEXTURE_2D,texture_id[5]);

}

myDisplay>

//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);

//设置当前纹理=================================================

//glColor4f(0,1,0,0.1);

//开始绘制边形

//给出端点空间位置与纹理端点位置

glEnd();

glVertex3f(-2.0,-2.0,2.0);

glVertex3f(-2.0,2.0,2.0);

glVertex3f(2.0,2.0,2.0);

glVertex3f(2.0,-2.0,2.0);

//绘制结束

glVertex3f(2.0,-2.0,2.0);

glTexCo

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

当前位置:首页 > 小学教育 > 数学

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

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