2013《计算机图形学》实验任务

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2013《计算机图形学》实验任务试用班级:数媒2011主讲教师:刘金义基本说明:•最低应完成100分值的题目。•每个题目都应该采用VC++6.0完成。如采用其他环境,需说明。•每个题目的实现结果不是必须与我的要严格一致,可以有你自己的发挥,但不能离基本要求太远。•题目完成后,可随时发送到CompGeom2013@163.com。在邮件标题中,应标注作者、题号和题目名称,例如“陈磊:实验4-HSV颜色空间”。•每个题目只给前3名提交的同学以成绩,以后提交的做无效处理,除非你的程序具有独一无二的特色。实验0.BITMAP图像文件的显示(20分)目的:进一步熟悉Windows的GDI编程;认识简单图像格式及其处理方法。要求:打开任意的BMP文件,显示该图像,并且能够进行颜色取反和二值化。方法:图像的读入可以采用API函数LoadImage(),也可以根据BitMap格式,逐项读入。图像的显示可以如下三种方法之一:•用SetPixel函数逐个象素显示;•用SetDIBitsToDevice函数一次全部显示;•用CBitmap类及BitBlt函数显示。你也可以在OpenGL下完成:利用auxDIBImageLoadA()函数装入图像,利用纹理绘制函数显示。参考效果:目录下有可执行的演示程序。实验1.一个特殊画板(30分)目的:熟悉基本图元的生成算法,进一步熟悉人机交互程序设计。要求:该平台需实现的目标:•可以绘制的图元包括直线段、圆、和实心多边形;•每个图元以当前颜色绘制;•只有在底色为白色的位置,图元才被绘出,其他颜色的位置不变,也就是说画出的图形永远不能被删除;•要有橡皮筋跟随鼠标移动;•实心多边形的交互方法:用鼠标左键确定多边形的前n-1个顶点,用右键确定最后一个顶点,并使多边形封闭。在顶点未确定前,要求总有一个橡皮筋跟着鼠标移动。在最后一个顶点确定后,把多边形填充成实心。方法:应自己编写绘直线段、圆、和实心多边形绘制函数。在整个实现过程中只需调用一个GDI函数:SetPixel()。你可以利用提供的多边形填充程序polyfill.c。评定:如果你的画板不具有“特殊性”,也可获得部分成绩。如果你能将画图结果输出为BMP文件,额外奖励20分。参考效果:目录下有可执行的演示程序。实验2.RGB颜色空间(20分)目的:认识RGB颜色空间,熟悉OpenGL下带颜色几何模型的渲染。要求:可以放缩和变角度观察。方法:将RGB正方体的六个正方形表面分割为更小的正方形,每个小正方形用同一颜色。你可以通过修改OpenGL入门程序来实现。评定:如果你能通过剖切,显示RGB空间的指定剖面,额外奖励20分。参考效果:目录下有可执行的演示程序。实验3.HSV颜色空间(30分)目的:认识HSV颜色空间,熟悉OpenGL下带颜色几何模型的渲染。要求:可以放缩和变角度观察。方法:将HSV锥体的侧面和顶面分别分割为小的三角形,每个三角形用颜色过渡的方法渲染。设置颜色时你需利用HSV到RGB的转换。你可以通过修改OpenGL入门程序来实现。评定:如果你能通过剖切,显示HSV空间的指定剖面,额外奖励20分。参考效果:目录下有可执行的演示程序。实验4.STL模型显示(30分)目的:熟悉几何模型在OpenGL下的渲染。附带学会文件读取。描述:STL文件是一种用三角形来描述形体表面的文件,其ASCII码文件的例子如下:solidAutoCADfacetnormal-9.2007829e-001-9.0619802e-0023.8110890e-001outerloopvertex3.3409047e+0001.2000000e+0021.0000000e+002vertex5.5824765e+0009.7240940e+0011.0000000e+002vertex8.4551301e+0009.7812346e+0011.0707107e+002endloopendfacetfacetnormal-9.2007829e-001-9.0619802e-0023.8110890e-001outerloopvertex6.2698369e+0001.2000000e+0021.0707107e+002vertex3.3409047e+0001.2000000e+0021.0000000e+002vertex8.4551301e+0009.7812346e+0011.0707107e+002endloopendfacet……endsolid要求:任意读入一个ASCII码的STL文件,显示出该形体。可以变换角度观察。对应目录下提供了两个STL文件实例。方法:读文件最好利用CDocument类的Serialize()方法。将读取的三角形存储在一个链表中。(也可利用CArray或标准模板库vector)。注意实例STL文件中的三角形可能多达一百万。鼓励:无。参考效果:目录下有可执行的演示程序。实验5.Bezier曲面茶壶(30分)目的:熟悉OpenGL下双三次Bezier曲面的渲染,进一步熟悉文件读取。描述:茶壶的表面数据存储在一文件中,文件的第1行为数字32,表示茶壶由32个双三次Bezier曲面构成。然后是32行,每行16个数,分别代表每个双三次Bezier曲面的16个控制点的序号。再然后是数字306,表示一共有306个控制点。接着是306行,每行给出顺序的控制点的坐标。要求:读入提供的茶壶数据文件,渲染它。并且能够放缩和换角度观察。方法:显示Bezier曲面采用glMap2(),glEvalCoord2(),glEvalMesh2(),glMapGrid2()等函数。在实现上你可利用OpenGL入门程序。读文件最好利用CDocument类的Serialize()方法。鼓励:如果你能为茶壶增加美观的紫砂纹理或青花纹理,额外奖励30分。参考效果:目录下有可执行的演示程序。实验6.透明的坐标平面(30分)目的:熟悉利用alpha融合生成透明效果。熟悉获得物体空间一点深度的方法。要求:生成具有半透明效果的三个坐标平面,并且可以变换视点观察。方法:应该把三个坐标平面分割为12块。在这12块上各取一点,利用gluProject()函数获得它们的深度。然后对这些深度进行排序。最后按照从后到前的顺序显示这12块平面片。显示前需利用glBlendFunc()设置融合模式。用glColor4f()指定RGBA。在实现上,可以利用OpenGL入门程序。鼓励:无。参考效果:目录下有可执行的演示程序。实验7.玻璃房子(30分)目的:熟悉利用alpha融合生成透明效果。熟悉获得物体空间一点深度的方法。要求:生成具有半透明效果的房子的6个面,房子内随便放置一些物体。可以变换视点观察。方法:应该房子的6个面上各取一点,利用gluProject()函数获得它们的深度。然后对这些深度进行排序。最后按照从后到前的顺序显示这6块平面片。显示前需利用glBlendFunc()设置融合模式。用glColor4f()指定RGBA。在实现上,可以利用OpenGL入门程序,房子的位置与尺寸不用变。鼓励:无。参考效果:目录下有可执行的演示程序。实验8.砖瓦房和树(30分)目的:熟悉纹理贴图的方法。熟悉利用Alpha融合和公告板技术生成树木。要求:房子应贴上砖墙,房顶应贴上瓦片。树木始终正对观察者。方法:纹理的最终映射利用glTexCoord2f()或gluQuadricTexture()函数。纹理图像的指定有两种方式:一种是利用显式的glTexImage2D();二是利用隐式方式,使用auxDIBImageLoad()、glGenTextures()、glBindTexture()与gluBuild2DMipmaps()函数。房子的位置与尺寸可以直接利用OpenGL入门程序。隐式方式纹理映射的代码可以参考“基于GLUT的OpenGL入门”。鼓励:如果为房子加上合适的门和窗户,额外奖励10-20分。参考效果:目录下有可执行的演示程序。目录下同时提供房子和树的纹理图像。实验9.交互生成B样条曲线(20分)目的:熟悉B样条曲线与Bezier曲线的关系。要求:用户交互输入若干控制点后,自动生成由这些控制点决定的准均匀三次B样条曲线。要求同时显示每段Bezier曲线的控制多边形。本题在GDI下完成即可。方法:每段Bezier曲线的绘制可以用绘制小线段的方法,也可以调用CDC类的PolyBezier()函数。鼓励:无。参考效果:目录下有可执行的演示程序。实验10.B样条曲面(30分)目的:熟悉双三次B样条曲面与双三次Bezier曲面的关系,熟悉B样条曲面的两种显示方法。进一步熟悉文件读取方法。要求:已知存在于文件中的B样条曲面的控制顶点网格数据(bs_surf_1.txt是一个例子文件),要求读入该文件并将该曲面真实地显示出来,并且可以在任意视点下观察。控制顶点网格数据文件的格式如下:u方向控制顶点mv方向控制顶点个数nP00的坐标值P01的坐标值。。。。。。Pm-1,n-1的坐标值方法:方法一是把B样条曲面看作Nurbs曲面的特例,利用gluNurbs()函数一次显示。方法二是把B样条曲面分割为一系列双三次Bezier曲面片,然后逐个显示Bezier曲面片。鼓励:如果曲面的表面被贴上纹理,额外奖励10分。参考效果:目录下有可执行的演示程序。实验11.房子内部(30分)目的:熟悉透视空间的设置,熟悉视线的球面交互。要求:房子墙壁、房顶和地面具有纹理。观察方式为透视。交互方式为眼睛位置不动,视线可以左右和上下旋转。相当于眼睛位于一个球的中心,注视点可为球面上的任意点。方法:透视空间的设置采用gluPerspective()函数。可以关闭光照。将入门程序中的房子的各个面掉转方向,贴上纹理。修改入门程序的WM_LBUTTONDOWN消息,使其适应球面环视漫游。鼓励:如果房间内有合适的简单家具,或者墙壁上有挂画,额外奖励10-30分。参考效果:目录下有可执行的演示程序。实验12.走遍大地(30分)目的:熟悉地貌的生成与三角面片表示,熟悉地貌的整体描述方法,熟悉地貌的漫游方法。要求:地貌的高度可以随机生成,也可以来自于卫星图像,使地貌更自然。地貌表面要有纹理。漫游时,观察者随着地貌起伏。方法:地貌就是一块矩形地域,分割成规则三角形,也就是说x,y坐标是固定的,z坐标可以是随机的,也可以来自一幅图像。在渲染时,可以有三种方式:一是用GL_TRIANGLES逐个三角形输入;二是用GL_TRIANGLE_STRIP以三角形带输入;三是用glEnableClientState()、glVertexPointer()设置好后,用glDrawElements()一次性绘出。我们推荐后两种方式。修改入门程序的WM_LBUTTONDOWN消息,使其适应行走形式漫游。鼓励:如果你的地貌可以是无限行走,或者加上天空,额外奖励10-30分。参考效果:目录下有可执行的演示程序。参考程序中的树木不是必须的。实验13.变色灯(40分)目的:熟悉OpenGL下形体的拾取方法。要求:所谓的街灯是一圆柱加一圆球,可以有多个,缺省时发红光。用户可以用鼠标点击任意一个灯,来切换灯的发光颜色。方法:总体思想就是处理WM_LBUTTONDOWN消息,使形体在GL_SELECT模式下在内存中重绘一次。这样,碰上拾取点的形体就被拾取。需利用的函数有:glSelectBuffer()、glRenderMode()、glInitNames()、glPushName()、gluPickMatrix()。在绘制代码中加入glLoadName()来指定可以选择的形体区域。鼓励:无。参考效果:目录下有可执行的演示程序。实验14.烽火台(30分)目的:熟悉动态景物的生成方法。要求:一个简单的圆台形烽火台和动态的火焰。方法:处理WM_TIMER消息,使得不断刷新屏幕。火焰的生成可以有三种方法:一是采用动态的公告板技术,公告板被分成小的矩形区域,用一个矩阵记录每个矩形区域的当前颜色,这些颜色随着

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功