实验七 OpenGL显示加速技术.doc_第1页
实验七 OpenGL显示加速技术.doc_第2页
实验七 OpenGL显示加速技术.doc_第3页
实验七 OpenGL显示加速技术.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告装 订 线课程名称:_计算机图形学_ 指导老师:_ _成绩:_ _实验名称: OpenGL显示加速技术 实验类型:_基础实验_同组学生姓名:_一、实验目的和要求通过实现实验内容,掌握OpenGL中顶点数组和显示列表的使用,并验证课程中关于OpenGL显示加速技术的内容。二、实验内容和原理使用Visual Studio C+编译已有项目工程。要求修改代码达到以下要求:1. 补充完成函数drawVA(),实现使用顶点数组绘制场景:void drawVA()2. 补充完成函数Gen3DObjectList (),实现显示列表的生成:GLint Gen3DObjectList();3. 分析对比使用三种方法得到的fps。4. 添加拾取功能,对于鼠标点中的Bunny或桌子,改变显示颜色。三、主要仪器设备 Microsoft Visual Studio 2010 Windows 7 Ultimate Glut压缩包 Ex7 工程四、操作方法和实验步骤 理解顶点数组:在OpenGL中,所有的几何图元都是由顶点定义的,而每个顶点又有很多属性,如:坐标,颜色,法向量等。如果对每个顶点逐个的调用函数来描述,那么,开销是非常大的。而且不方便对复杂几何体顶点的管理。这里采用了顶点数组的方法,不但便于数据的管理,而且大大减少了函数的调用。使用顶点数组,需要三个步骤:启用数组,指定数组数据、解引用并渲染。 启用顶点数组:void glEnableClientState(GLenum array); 指定数组的数据:void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid* pointer); 解引用和渲染:void glArrayElement(GLint ith); 示例代码:void drawVA() glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT,0,normals); glVertexPointer(3, GL_FLOAT, 0, vertices); / draw a cube glDrawElements(GL_TRIANGLES,16301*3,GL_UNSIGNED_SHORT,face_indicies); / deactivate vertex arrays after drawing glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); Gen3DObjectList ()函数GLint Gen3DObjectList()GLint lid=glGenLists(1); /生成显示类表glNewList(lid, GL_COMPILE);glBegin (GL_TRIANGLES); /每3分坐标相连接,生成一个三角形 for(int i=0;i(sizeof(face_indicies)/sizeof(face_indicies0);i+) for(int j=0;j3;j+) int idx=face_indiciesij; glNormal3fv(&normalsidx0); glVertex3fv(&verticesidx0); glEnd ();glEndList(); /结束生成显示列表return lid; 添加拾取功能 鼠标操作:if(button = GLUT_LEFT_BUTTON & state = GLUT_DOWN)printf(x = %d, y = %d , x , y);startPicking(x, y);selectRender();stopPicking(); 实现pick功能时的拾取视窗大小定义:gluPickMatrix(cursorX , viewport3 - cursorY , 1 , 1 , viewport); 返回法线绘制模型的个数:hits = glRenderMode(GL_RENDER);printf(hits = %dn, hits); 拾取功能,取最近的拾取对象minZ = 0xffffffff;for(int i = 0; i hits; i +)names = *ptr;ptr +;if(*ptr minZ)numberOfNames = names;minZ = *ptr;ptrNames = ptr + 2;ptr += names + 2;五、实验结果与分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论