欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机图形学报告.doc

    • 资源ID:3033295       资源大小:10.38MB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机图形学报告.doc

    .-计算机图形学 (2017年秋季学期)序号: 实 验 报 告系别:计算机科学与技术班级:姓名:学号:实验名称:2-真实感图形绘制总成绩:评语: 日期:计算机图形学实验报告实验名称真实感图形绘制实验序号2实验日期2017.12.13实验人一、实验目的、要求与环境1目的:通过实验,学生应掌握通过计算机程序进行真实感图形绘制的基本原理,特别是对三维显示对象进行纹理映射的基本方法,将理论和实际应用切实结合起来。2.要求:对一个三维立方体进行旋转,对其6个不同的面进行6个不同图像的纹理映射,并进行投影变换与显示,分析增强后的视觉效果,提交实验报告。3.环境:Windows 7操作系统Microsoft Visual Studio 2005OpenGL函数库4. 自带位图文件(换成你自己的图像文件): 二、实验内容与步骤1. 准备相关图像文件。2. 进行立方体各面图像与旋转速度的大体设计。3在Windows 7 操作系统上,打开Microsoft Visual Studio 2005,编写相关程序,完成程序主体框架结构。4编写六面体显示相关的程序代码。5编写六面体旋转相关的程序代码。6编写深度检测相关的程序代码。7. 编写纹理载入功能的相关程序代码。8. 编写纹理参数定义功能的相关程序代码。9. 编写纹理映射功能的相关程序代码。10对程序进行相关调试,修改程序,去除其中的BUG。11. 观察纹理映射后的六面体的旋转显示,与预想的结果进行对比,修改相关程序参数。12截屏,保留实验结果,进行实验结果分析,并撰写实验报告。三、相关背景知识1. 图像读取可能需要的数据结构: FILE* fpBITMAPFILEHEADERbmpFH;BITMAPINFOHEADERbmpIH;unsigned chartemp;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_id0 );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> / use as needed for your system#include <gl/Gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <cstdio>#include <cstdlib>#include "glaux.h"#pragma comment( lib, "glaux.lib" )#define GL_GENERATE_MIPMAP 0x8191/ 纹理图像数据unsigned char * pBitmapData;intwidth;intheight;GLuint texture_id6;AUX_RGBImageRec *pImage;/<<<<<<<<<<<<<<<<<<<<<<< myInit >>>>>>>>>>>>>>>>>>>> void myInit(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 ); / get a texture id glGenTextures( 6, texture_id ); /生成纹理索引 / load data0= pImage = auxDIBImageLoadA("1.bmp" ); /载入纹理图像文件 /bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id0 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); / load data1= pImage = auxDIBImageLoadA("2.bmp" ); /载入纹理图像文件 / bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id1 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); / load data2= pImage = auxDIBImageLoadA("3.bmp" ); /载入纹理图像文件 / bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id2 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); / load data3= pImage = auxDIBImageLoadA("4.bmp" ); /载入纹理图像文件 / bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id3 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); / load data4= pImage = auxDIBImageLoadA("5.bmp" ); /载入纹理图像文件 / bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id4 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); / load data5= pImage = auxDIBImageLoadA("6.bmp" ); /载入纹理图像文件 / bind and pass texure data into openGL glBindTexture( GL_TEXTURE_2D, texture_id5 ); /设定当前纹理 / set parameters to make mipmaps 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); /开启硬件加速 / create the textures glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data);/<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>>/ the redraw functionvoid myDisplay(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_id0 ); /设置当前纹理=/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_id1 ); /设置当前纹理=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_id2 ); /设置当前纹理=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_id3 ); /设置当前纹理=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_id4 ); /设置当前纹理=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_id5 ); /设置当前纹理=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(); /绘制结束glutSwapBuffers(); /交换缓冲区glutPostRedisplay(); /重新显示窗口/<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>void main(int argc, char *argv) /主程序入口glutInit(&argc, argv); / OpenGL程序初始化glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); / 设置显示模型glutInitWindowSize(640,480); / 设置窗口大小glutInitWindowPosition(100, 150); / 设置窗口位置glutCreateWindow("tong lijing"); / 产生窗口glutDisplayFunc(myDisplay); / 注册显示函数myInit(); /我的初始化程序glutMainLoop(); / 进入OpenGL程序主循环七、实验的体会与收获1通过这次实验,我学会了使用正方形图元组成了正方体,并对正方体的六个面进行纹理映射,同时对正方体的观察视点,旋转速度进行设置。 做完本周实验我收获很多,同时我使用了glRotatef(angle, 0.0f, 0.0f, 1.0f);语句,完成了旋转功能。程序还通过glEnable(GL_TEXTURE_2D);语句,完成了启用纹理功能。就是通过这些语句我完成了纹理正方体的旋转,虽然费劲周折,但我最终还是完成了本次实验。做实验一定要多多的了解基础知识并且要有耐心。

    注意事项

    本文(计算机图形学报告.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开