还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《—计算机图形学—》实验指导书王卫东别小川编写适用专业计算机科学与技术江苏科技大学电子信息学院2006年7月前言计算机图形学(ComputerGraphics)是研究怎样用数字计算机生成、处理和显示图形的一门学科随着计算机图形学不断发展,它的应用范围也日趋广泛计算机图形学课程目的及任务是着重介绍计算机图形学的基本内容及原理与方法它是计算机专业选修课课程的主要内容有计算机图形学的概论及应用,计算机用户接口和交互技术,计算机图形编程,二维图形扫描算法与几何变换,三维形体表示与投影变换,曲线与曲面造型技术,真实感图形等为了使学生更好地理解和深刻地掌握图形的几何变换、光栅图形的表示及处理方法、三维形体表示等方面的知识并在此基础上,训练和培养学生对基本图形系统的分析和设计能力,共设置了3项设计性实验,分别是图形的几何变换、区域填充、曲线及曲面表示图形的几何变换要求学生掌握图形的平移、缩放、旋转等基本变换知识区域填充要求学生了解并掌握光栅图形的表示方法,并实现种子算法或扫描线算法曲线及曲面表示属于三维图形的造型技术本指导书重点讲述了各实验的基本原理,并给出了详细的实验素材实验主要针对计算机科学与技术专业,也可作为研究生的辅助实验指导目录TOC\o1-3\h\z实验一图形的几何变换3实验二图形的区域填充6实验三曲线、曲面的生成8实验四动画设计14附录
一、学生实验报告基本内容要求15实验一图形的几何变换实验学时4学时实验类型设计实验要求必修
一、实验目的二维图形的平移、缩放、旋转和投影变换(投影变换可在实验三中实现)等是最基本的图形变换,被广泛用于计算机图形学的各种应用程序中,本实验通过算法分析以及程序设计实验二维的图形变换,以了解变换实现的方法如可能也可进行裁剪设计
二、实验内容掌握平移、缩放、旋转变换的基本原理,理解线段裁剪的算法原理,并通过程序设计实现上述变换建议采用VC++实现OpenGL程序设计
三、实验原理、方法和手段1.图形的平移在屏幕上显示一个人或其它物体(如图1所示),用交互操作方式使其在屏幕上沿水平和垂直方向移动Tx和Ty,则有x’=x+Txy’=y+Ty其中x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标其交互方式可先定义键值,然后操作功能键使其移动2.图形的缩放在屏幕上显示一个帆船(使它生成在右下方),使其相对于屏幕坐标原点缩小s倍(即x方向和y方向均缩小s倍)则有x’=x*sy’=y*s注意有时图形缩放并不一定相对于原点,而是事先确定一个参考位置一般情况下,参考点在图形的左下角或中心设参考点坐标为xf、yf则有变换公式x’=x*Sx+xf*1-Sx=xf+x-xf*Sxy’=y*Sy+yf*1-Sy=yf+y-yf*Sy式中的x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标当Sx1和Sy1时为放大倍数,Sx1和Sy1时为缩小倍数(但Sx和Sy必须大于零)3.图形的旋转在屏幕上显示一个汽车,根据自己确定的旋转角度和旋转中心对图形进行旋转旋转公式为x’=xf+x-xf*cosangle-y-yf*sinangley’=yf+y-yf*cosangle+x-xf*sinangle其中xfyf为围绕旋转的中心点的坐标xy为旋转前图形中某点的坐标,x’和y’为旋转后图形中该点的坐标4.裁剪对一个三角形进行裁剪,裁剪后的图形应是一个封闭的图形可采用线段裁剪法,其方法可用书上的线段相交求点的公式,确定可见线段予以保存,不在窗口的线段则应舍弃图1
四、实验组织运行要求本实验采用集中授课形式,每个同学独立完成上述实验要求
五、实验条件每人一台计算机独立完成实验
六、实验步骤
(1)将图形显示在初始位置
(2)对图形各点按变换表达式作坐标变换,计算出各点变换后的相应点的坐标
(3)将原来的图形抹去
(4)在新的位置显示图形
七、思考题采用中点分割算法完成图形的裁剪操作
八、实验报告实验报告主要包括实验预习、实验说明、程序代码、实验结果及分析等内容实验二图形的区域填充实验学时4学时实验类型设计实验要求必修
一、实验目的区域填充是指先将区域内的一点(常称为种子点)赋予给定颜色,然后将这种颜色扩展到整个区域内的过程区域填充技术广泛应用于交互式图形、动画和美术画的计算机辅助制作中本实验采用递归填充算法或扫描线算法实现对光栅图形的区域填充通过本实验,可以掌握光栅图形编程的基本原理和方法
二、实验内容掌握光栅图形的表示方法,实现种子算法或扫描线算法通过程序设计实现上述算法建议采用VC++实现OpenGL程序设计
三、实验原理、方法和手段1.递归算法在要填充的区域内取一点(X,Y)的当前颜色记为oldcolor,用要填充的颜色newcolor去取代,递归函数如下procedureflood-fillXYoldcolornewcolor:integer;beginifgetpixelframebufferxy=oldcolorthenbeginsetpixelframebufferxynewcolor;flood-fillXY+1oldcolornewcolor;flood-fillXY-1oldcolornewcolor;flood-fillX-1Yoldcolornewcolor;flood-fillX+1Yoldcolornewcolor;endend2.扫描线算法扫描线算法的效率明显高于递归算法,其算法的基本思想如下
(1)(初始化)将算法设置的堆栈置为空,将给定的种子点(xy)压入堆栈
(2)(出栈)如果堆栈为空,算法结束;否则取栈顶元素xy作为种子点
(3)(区段填充)从种子点(xy)开始沿纵坐标为y的当前扫描线向左右两个方向逐个象素进行填色,其值置为newcolor直到抵达边界为止
(4)(定范围)以xleft和xright分别表示在步骤3中填充的区段两端点的横坐标
(5)(进栈)分别在与当前扫描线相邻的上下两条扫描线上,确定位于区间[xleft,xright]内的给定区域的区段如果这些区段内的象素的颜色值为newcolor或者boundarycolor边界上象素的颜色值,则转到步骤2,否则取区段的右端点为种子压入堆栈,再转到步骤2继续执行
四、实验组织运行要求本实验采用集中授课形式,每个同学独立完成上述实验要求
五、实验条件每人一台计算机独立完成实验
六、实验步骤
(1)将图形显示在初始位置
(2)给定种子点的坐标
(3)显示从种子点开始的扩散过程
(4)显示填充后的图形
七、思考题如何实现光栅图形的扫描转换?
八、实验报告实验报告主要包括实验预习、实验说明、程序代码、实验结果及分析等内容实验三曲线、曲面的生成实验学时4学时实验类型设计实验要求必修
一、实验目的利用Bezier,B样条或NuBer(非均匀有理B样条)曲线,生成图2茶壶,以加深对曲线曲面生成三维图形的原理,控制方法以及算法的实现(包括隐藏线,面的消除),要求生成的茶壶要光滑
二、实验内容掌握曲线、曲面的表示方法,实现茶壶的三维造型设计通过程序设计实现上述算法建议采用VC++实现OpenGL程序设计
三、实验原理、方法和手段采用三次Bezier曲线或其它函数曲线生成图2所示茶壶利用三次Bezier曲线生成时,n=3,若写成向量或写成t的三次参数式为其中P0P1P2P3是特征多边形上四个顶点(控制点)的向量若将其分解为二维平面中x、y方向的分量,则图2茶壶以下分析以下茶壶的绘制方法可以假定壶体表面是一个旋转面,因此只要在x-y平面上找到用来生成旋转面的基本曲线就可以了采用分段三次贝齐尔曲线,选十个控制点,它们的数据见表1a,控制点位置与生成的曲线见图3a这条曲线由三段组成,分别由点
[1234],
[4567],
[78910]控制注意到47公用,且345在一直线上,678也在一直线上,因而可知三段曲线拼接后有一阶连续性类似地,壶盖也视为旋转面,它的外轮廓由两段贝齐尔曲线生成,分别由
[1234]和
[4567]控制由于345共线,4为公共点,故也有一阶连续性这七个点的数据见表1b,对应的轮廓线见图3b旋转面的显示可给定拟合后外形线上的一点(x0y0),绕y轴旋转得Y=Y0平面上一个圆若只作沿Z轴平行投影变换,即只去掉z分量,则它显示成一线段一个避免这种现象的简便方法是将它们绕X轴适当旋转同一角度,然后再投影到x-y平面上显示茶壶的壶嘴则要用贝齐尔曲面片来表示(也可以用曲线,但需插入控制点)首先确定剖面的外轮廓线这里有两条,每一条也由七个控制点控制,它们的数据见表1c,外轮廓线见图3c,但是要注意现在要再增加二条线(每线也相应的有七个控制点),它们分别与两外轮廓线有相同的x、y坐标,只是z的坐标不再是零,而是有变化,这个变化的方式是与1112
(2122)相对应的=
0.66与131415
(232425)对应的为z=
0.25与另二点对应的为z=
0.15,这样壶嘴实际上由二片贝齐尔曲面片(每片十六个控制点)组成例如其中一片上的四个控制点分别为(11x11y0),(11x11y
0.66)(21x21y
0.66),(21x21y0),其中11x11y分别指第十一个控制点xy坐标对每一曲面片的显示,实际上可以显示八条曲线,或者适当加密类似地处理壶的把手,唯一与壶嘴有别处是另外两线的z不随控制点不同而变,即取定值z=
0.3数据见表1d外轮廓线图见3d,最后,壶底可以用半径为
1.5的圆盘来表示,容易想象它应如何加入这一图形生成过程中图2就是用这种方法画出的茶壶表1a壶体控制点数据表1b壶盖控制点数据xy
10.
03.
020.
83.
030.
02.
740.
22.
5550.
42.
461.
32.
471.
32.25xy
11.
40002.
2500021.
33752.
3812531.
43752.
3812541.
50002.
2500051.
75001.
7250062.
00001.
2000072.
00000.
7500082.
00000.
3000091.
50000.
07500101.
50000.0000表1c壶嘴控制点数据xy
111.
7211.
7111.
27210.
4122.
6223.
1121.
275220.
675132.
3232.
4131.
95231.
875142.
7243.
3142.
25242.
2152.
8253.
525152.
325252.
34162.
9263.
4162.
325262.
36172.
8273.
2172.
25272.25表1d壶嘴控制点数据xy11–
1.621–
1.
5111.
875212.112–
2.322–
2.
5121.
875222.113–
2.723–
3.
0131.
875232.114–
2.724–
3.
0141.
65241.6515–
2.725–
3.
0151.
425251.2016–
2.526–
2.
65160.
975260.787517–
2.027–
1.
90170.
75270.45图3c壶嘴外轮廓线图3d壶把手外轮廓线
四、实验组织运行要求本实验采用集中授课形式,每个同学独立完成上述实验要求
五、实验条件每人一台计算机独立完成实验
六、实验步骤
(1)壶体及壶盖的外轮廓线
(2)旋转生成壶体及壶盖
(3)完成壶嘴及把手的绘制
七、思考题如何采用B样条曲线曲面实现本实验?
八、实验报告实验报告主要包括实验预习、实验说明、程序代码、实验结果及分析等内容实验四动画设计实验学时4学时实验类型综合实验要求选做
一、实验目的通过实验,了解动画设计的原理、方法,并培养学生的想象能力、创新意识及动手能力,只要求采用二维图形变换处理
二、实验内容“警察抓小偷”是较早的有名的游戏动画然而,它遇到的关卡有百余处之多,我们希望学生自己发挥想象力,大胆创新,这是体现您的程序设计和创意能力的教好方法
三、实验原理、方法和手段一辆警车(可以有警察人员),在公路、湖边追赶一拿着东西的小偷,小偷逃跑可以用图1姿势
(1)生成公路、湖边、湖水、湖岸、房屋等
(2)生成的警车可以移动旋转
(3)作平行移动的小偷
(4)能航行到对岸的船或直升飞机(供逃跑用)
(5)要求进行碰撞检测,若捉到了小偷,检测后发出信号,以示捉到
四、实验组织运行要求本实验采用开放形式,作为选做实验,同学可以独立或分组完成上述实验要求
五、实验条件每人一台计算机完成实验附录
一、学生实验报告基本内容要求所有实验项目的报告必须以课程为单位装订成册,原则上使用现行“实验报告簿”校园内有售实验报告簿应事先准备好,用来做预习报告、实验记录和实验报告,要求这三个过程在一个实验报告中完成1.实验预习在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求,需要用到的仪器设备、物品资料以及简要的实验步骤,形成一个操作提纲对实验中的安全注意事项及可能出现的现象等做到心中有数,但这些不要求写在预习报告中设计性实验要求进入实验室前写出实验方案2.实验记录学生开始实验时,应该将记录本放在近旁,将实验中所做的每一步操作、观察到的现象和所测得的数据及相关条件如实地记录下来实验记录中应有指导教师的签名3.实验报告主要内容包括对实验数据、实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等图3b壶盖外轮廓线图3a壶体外轮廓线。