2013《计算机图形学》实验任务_第1页
2013《计算机图形学》实验任务_第2页
2013《计算机图形学》实验任务_第3页
2013《计算机图形学》实验任务_第4页
2013《计算机图形学》实验任务_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、2013计算机图形学实验任务试用班级:数媒2011主讲教师:刘金义基本说明: 最低应完成100分值的题目。 每个题目都应该采用VC+6.0完成。如采用其他环境,需说明。 每个题目的实现结果不是必须与我的要严格一致,可以有你自己的发挥,但不能离基本要求太远。 题目完成后,可随时发送到CompG。在邮件标题中,应标注作者、题号和题目名称,例如“陈磊:实验4HSV颜色空间”。 每个题目只给前3名提交的同学以成绩,以后提交的做无效处理,除非你的程序具有独一无二的特色。实验0. BITMAP图像文件的显示(20分)目的:进一步熟悉Windows的GDI编程;认识简单图像格式及

2、其处理方法。要求:打开任意的BMP文件,显示该图像,并且能够进行颜色取反和二值化。方法:图像的读入可以采用API函数LoadImage(),也可以根据BitMap格式,逐项读入。图像的显示可以如下三种方法之一: 用SetPixel函数逐个象素显示; 用SetDIBitsToDevice函数一次全部显示; 用CBitmap类及BitBlt函数显示。 你也可以在OpenGL下完成:利用auxDIBImageLoadA()函数装入图像,利用纹理绘制函数显示。参考效果:目录下有可执行的演示程序。实验1. 一个特殊画板(30分)目的:熟悉基本图元的生成算法,进一步熟悉人机交互程序设计。要求:该平台需实现

3、的目标: 可以绘制的图元包括直线段、圆、和实心多边形; 每个图元以当前颜色绘制; 只有在底色为白色的位置,图元才被绘出,其他颜色的位置不变,也就是说画出的图形永远不能被删除; 要有橡皮筋跟随鼠标移动; 实心多边形的交互方法:用鼠标左键确定多边形的前n1个顶点,用右键确定最后一个顶点,并使多边形封闭。在顶点未确定前,要求总有一个橡皮筋跟着鼠标移动。在最后一个顶点确定后,把多边形填充成实心。方法:应自己编写绘直线段、圆、和实心多边形绘制函数。在整个实现过程中只需调用一个GDI函数:SetPixel( )。你可以利用提供的多边形填充程序polyfill.c。评定:如果你的画板不具有“特殊性”,也可获

4、得部分成绩。如果你能将画图结果输出为BMP文件,额外奖励20分。参考效果:目录下有可执行的演示程序。实验2. RGB颜色空间(20分)目的:认识RGB颜色空间,熟悉OpenGL下带颜色几何模型的渲染。要求:可以放缩和变角度观察。方法:将RGB正方体的六个正方形表面分割为更小的正方形,每个小正方形用同一颜色。你可以通过修改OpenGL入门程序来实现。评定:如果你能通过剖切,显示RGB空间的指定剖面,额外奖励20分。参考效果:目录下有可执行的演示程序。实验3. HSV颜色空间(30分)目的:认识HSV颜色空间,熟悉OpenGL下带颜色几何模型的渲染。要求:可以放缩和变角度观察。方法:将HSV锥体的

5、侧面和顶面分别分割为小的三角形,每个三角形用颜色过渡的方法渲染。设置颜色时你需利用HSV到RGB的转换。你可以通过修改OpenGL入门程序来实现。评定:如果你能通过剖切,显示HSV空间的指定剖面,额外奖励20分。参考效果:目录下有可执行的演示程序。实验4. STL模型显示(30分)目的:熟悉几何模型在OpenGL下的渲染。附带学会文件读取。描述:STL文件是一种用三角形来描述形体表面的文件,其ASCII码文件的例子如下:solid AutoCAD facet normal -9.e-001 -9.e-002 3.e-001 outer loop vertex 3.e+000 1.e+002 1

6、.e+002 vertex 5.e+000 9.e+001 1.e+002 vertex 8.e+000 9.e+001 1.e+002 endloop endfacet facet normal -9.e-001 -9.e-002 3.e-001 outer loop vertex 6.e+000 1.e+002 1.e+002 vertex 3.e+000 1.e+002 1.e+002 vertex 8.e+000 9.e+001 1.e+002 endloop endfacet endsolid要求:任意读入一个ASCII码的STL文件,显示出该形体。可以变换角度观察。对应目录下提供了

7、两个STL文件实例。方法:读文件最好利用CDocument类的Serialize( )方法。将读取的三角形存储在一个链表中。(也可利用CArray或标准模板库vector)。注意实例STL文件中的三角形可能多达一百万。鼓励:无。参考效果:目录下有可执行的演示程序。实验5. Bezier曲面茶壶(30分)目的:熟悉OpenGL下双三次Bezier曲面的渲染,进一步熟悉文件读取。描述:茶壶的表面数据存储在一文件中,文件的第1行为数字32,表示茶壶由32个双三次Bezier曲面构成。然后是32行,每行16个数,分别代表每个双三次Bezier曲面的16个控制点的序号。再然后是数字306,表示一共有30

8、6个控制点。接着是306行,每行给出顺序的控制点的坐标。要求:读入提供的茶壶数据文件,渲染它。并且能够放缩和换角度观察。方法:显示Bezier曲面采用glMap2(),glEvalCoord2(),glEvalMesh2(),glMapGrid2()等函数。在实现上你可利用OpenGL入门程序。读文件最好利用CDocument类的Serialize( )方法。鼓励:如果你能为茶壶增加美观的紫砂纹理或青花纹理,额外奖励30分。参考效果:目录下有可执行的演示程序。实验6. 透明的坐标平面(30分)目的:熟悉利用alpha融合生成透明效果。熟悉获得物体空间一点深度的方法。要求:生成具有半透明效果的三

9、个坐标平面,并且可以变换视点观察。方法:应该把三个坐标平面分割为12块。在这12块上各取一点,利用gluProject()函数获得它们的深度。然后对这些深度进行排序。最后按照从后到前的顺序显示这12块平面片。显示前需利用glBlendFunc()设置融合模式。用glColor4f()指定RGBA。在实现上,可以利用OpenGL入门程序。鼓励:无。参考效果:目录下有可执行的演示程序。实验7. 玻璃房子(30分)目的:熟悉利用alpha融合生成透明效果。熟悉获得物体空间一点深度的方法。要求:生成具有半透明效果的房子的6个面,房子内随便放置一些物体。可以变换视点观察。方法:应该房子的6个面上各取一点

10、,利用gluProject()函数获得它们的深度。然后对这些深度进行排序。最后按照从后到前的顺序显示这6块平面片。显示前需利用glBlendFunc()设置融合模式。用glColor4f()指定RGBA。在实现上,可以利用OpenGL入门程序,房子的位置与尺寸不用变。鼓励:无。参考效果:目录下有可执行的演示程序。实验8. 砖瓦房和树(30分)目的:熟悉纹理贴图的方法。熟悉利用Alpha融合和公告板技术生成树木。要求:房子应贴上砖墙,房顶应贴上瓦片。树木始终正对观察者。方法:纹理的最终映射利用glTexCoord2f()或gluQuadricTexture()函数。纹理图像的指定有两种方式:一种

11、是利用显式的glTexImage2D();二是利用隐式方式,使用auxDIBImageLoad()、glGenTextures()、glBindTexture()与gluBuild2DMipmaps()函数。房子的位置与尺寸可以直接利用OpenGL入门程序。隐式方式纹理映射的代码可以参考“基于GLUT的OpenGL入门”。鼓励:如果为房子加上合适的门和窗户,额外奖励10-20分。参考效果:目录下有可执行的演示程序。目录下同时提供房子和树的纹理图像。实验9. 交互生成B样条曲线(20分)目的:熟悉B样条曲线与Bezier曲线的关系。要求:用户交互输入若干控制点后,自动生成由这些控制点决定的准均匀

12、三次B样条曲线。要求同时显示每段Bezier曲线的控制多边形。本题在GDI下完成即可。方法:每段Bezier曲线的绘制可以用绘制小线段的方法,也可以调用CDC类的PolyBezier()函数。鼓励:无。参考效果:目录下有可执行的演示程序。实验10. B样条曲面(30分)目的:熟悉双三次B样条曲面与双三次Bezier曲面的关系,熟悉B样条曲面的两种显示方法。进一步熟悉文件读取方法。要求:已知存在于文件中的B样条曲面的控制顶点网格数据(bs_surf_1.txt是一个例子文件),要求读入该文件并将该曲面真实地显示出来,并且可以在任意视点下观察。控制顶点网格数据文件的格式如下:u方向控制顶点m v方

13、向控制顶点个数nP00的坐标值P01的坐标值。Pm-1,n-1的坐标值 方法:方法一是把B样条曲面看作Nurbs曲面的特例,利用gluNurbs()函数一次显示。方法二是把B样条曲面分割为一系列双三次Bezier曲面片,然后逐个显示Bezier曲面片。鼓励:如果曲面的表面被贴上纹理,额外奖励10分。参考效果:目录下有可执行的演示程序。实验11. 房子内部(30分)目的:熟悉透视空间的设置,熟悉视线的球面交互。要求:房子墙壁、房顶和地面具有纹理。观察方式为透视。交互方式为眼睛位置不动,视线可以左右和上下旋转。相当于眼睛位于一个球的中心,注视点可为球面上的任意点。方法:透视空间的设置采用gluPe

14、rspective()函数。可以关闭光照。将入门程序中的房子的各个面掉转方向,贴上纹理。修改入门程序的WM_LBUTTONDOWN消息,使其适应球面环视漫游。鼓励:如果房间内有合适的简单家具,或者墙壁上有挂画,额外奖励10-30分。参考效果:目录下有可执行的演示程序。实验12. 走遍大地(30分)目的:熟悉地貌的生成与三角面片表示,熟悉地貌的整体描述方法,熟悉地貌的漫游方法。要求:地貌的高度可以随机生成,也可以来自于卫星图像,使地貌更自然。地貌表面要有纹理。漫游时,观察者随着地貌起伏。方法:地貌就是一块矩形地域,分割成规则三角形,也就是说x,y坐标是固定的,z坐标可以是随机的,也可以来自一幅图

15、像。在渲染时,可以有三种方式:一是用GL_TRIANGLES逐个三角形输入;二是用GL_TRIANGLE_STRIP以三角形带输入;三是用glEnableClientState()、glVertexPointer()设置好后,用glDrawElements()一次性绘出。我们推荐后两种方式。修改入门程序的WM_LBUTTONDOWN消息,使其适应行走形式漫游。鼓励:如果你的地貌可以是无限行走,或者加上天空,额外奖励10-30分。参考效果:目录下有可执行的演示程序。参考程序中的树木不是必须的。实验13. 变色灯(40分)目的:熟悉OpenGL下形体的拾取方法。要求:所谓的街灯是一圆柱加一圆球,可

16、以有多个,缺省时发红光。用户可以用鼠标点击任意一个灯,来切换灯的发光颜色。方法:总体思想就是处理WM_LBUTTONDOWN消息,使形体在GL_SELECT模式下在内存中重绘一次。这样,碰上拾取点的形体就被拾取。需利用的函数有:glSelectBuffer()、glRenderMode()、glInitNames()、glPushName()、gluPickMatrix()。在绘制代码中加入glLoadName()来指定可以选择的形体区域。鼓励:无。参考效果:目录下有可执行的演示程序。实验14. 烽火台(30分)目的:熟悉动态景物的生成方法。要求:一个简单的圆台形烽火台和动态的火焰。方法:处理WM_TIMER消息,使得不断刷新屏幕。火焰的生成可以有三种方法:一是采用动态的公告板技术,公告板被分成小的矩形区域,用一个矩阵记录每个矩形区域的当前颜色,这些颜色随着刷新而改变。目录里提供了改变颜色矩阵的算法代码。二是准备多幅火焰纹理图像进行重复切换,这些图像也被贴在一个公告板上。三是使用粒子系统。鼓励:如果你使

温馨提示

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

评论

0/150

提交评论