版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学实验指导书主讲:主讲:宋春花宋春花教材:教材:计算机图形学计算机图形学适应专业:软件工程总学时:总学时:40 学时实验学时:实验学时:102011-5-20前 言随着计算机科学与技术的迅猛发展,特别是大规模集成电路和超大规模集成电路技术的飞速发展,计算机已经成为一种高速、费用低的生成图形的有效工具。计算机图形学作为利用计算机生成图形的技术,已经越来越广泛地在各个领域得到应用。随着计算机图形学应用领域的拓宽和应用水平的提高,人们越来越重视对该项技术的研究和利用。当今,计算机图形学已经成为了计算机科学技术领域的一个重要研究方向,并被广泛的应用于科学计算、工程设计、医药、工业、艺术、娱乐
2、业、广告业、教育与培训、商业和政府部门等。鉴于计算机图形学的重要性和应用的广泛性,计算机科学与技术专业将其设置为专业必选的选修课。它主要是研究用计算机及其图形设备来输入、表示、变换、运算和输出图形的原理、算法及系统。通过对本课程的学习,使学生对计算机图形学有一个完整的了解,并为进行计算机图形学应用和研究打下扎实基础。由于本课程实践性较强,计划中安排 10 学时实验。通过实验,使学生更加深入的理解计算机图形系统的工作机理和基本图形生成和处理算法。 在实验过程中,能够培养学生的自学能力、团队协作能力、解决问题能力、软件开发能力等多种能力。培养学生的算法设计能力和编程能力,能够应用计算机来解决在科学
3、研究、工程设计与制造中有关图形处理的能力;在图形学理论与算法方面的科研能力;应用高级绘图软件及对其进行二次开发的能力,并具有开发大型通用或专用绘图软件的能力。为学生毕业设计、和毕业后从事计算机绘图、计算机辅助设计、图形生成、图像处理等打下基础。培养学生的算法设计能力和编程能力,目目 录录一、实验目的和要求一、实验目的和要求.1二、实验环境二、实验环境.2三、实验项目三、实验项目.3实验 1 二维基本图形生成的算法实现.3实验 2 图形的裁剪.8实验 3 几何图形变换.13实验 4 BEZIER 曲线和 B 样条曲线的绘制.17实验 5 基于 OPENGL 的实体建模.19第四章第四章 参考文献
4、参考文献.21一、实验目的和要求计算机图形学是计算机专业本科生的一门理论性、技术性、应用性较强的专业课程。实验目的是:通过上机实践,让学生更好地了解和掌握计算机图形学的基本图形生成的各种算法、对各种算法加以比较,同时在实践中发现问题、解决问题,给学生以新的启迪,培养学生的创新能力和实际动手能力。实验要求:实验要求:1、采用 VC+程序开发环境和 OpenGL 图形库进行课程实验,通过实验掌握基本图元-直线和圆弧生成算法;掌握曲线和曲面的基本绘制方法;掌握图形变换算法;掌握规则和不规则实体的建模技术;掌握真实感绘图技术;能够综合利用上述技术,进行一定复杂虚拟场景的设计。为后续的课程奠定良好的基础
5、。2、上机实验前,要求完成实验报告的实验目的、理论基础、算法设计及源程序初稿。实验程序调试过程中,可以互相讨论、检查程序中存在的问题。实验完成之后,应思考算法与源程序的评价与改进及对结果的影响等分析,提交实验源程序和实验报告。并要求用正规的实验报告纸和封面装订整齐,按时上交。二、实验环境实验环境要求:硬件:普通 PC386 以上微机;软件:操作系统:Windows 98/2000;开发语言: Turbo C 、Visual C+ 6.0、OpenGl,或其它学生掌握的高级语言。三、实验项目为加强学生对计算机图形学理论知识的进一步理解,本实验设计了五次实验,实验内容力求理论性和实用性的紧密结合。
6、实验一、二、三、四为基础性实验,通过编程实现图形生成及处理变换的各种基本算法,从而使学生进一步理解和牢固掌握图形学中重要的理论知识,同时使用当前流行的图形和游戏开发工具OPENGL,实现相应的功能,让学生理解图形理论的实际应用;实验五为应用性实验,采用OPENGL对规则实体和不规则实体进行建模。该实验旨在提高学生的综合动手能力和创新能力,为以后从事图形、游戏及软件开发工作打下良好的基础。 实验一:二维基本图形生成的算法实现实验二:图形的裁剪实验三:几何图形变换实验实验四:BEZIER曲线和B样条曲线的绘制实验五:采用OPENGL进行实体建模实验实验一、一、二维基本图形生成的算法实现二维基本图形
7、生成的算法实现实验目的1、通过实验,进一步理解和掌握 DDA 和中点算法,Bresenham 算法;2、掌握 DDA 和中点算法,中点算法,Bresenham 算法算法生成直线段的基本过程。掌握中点画圆的算法。3、通过编程,会在 VC+环境下完成用 DDA、中点算法实现直线段的绘制和中点算法实现圆的绘制。实验属性该实验为验证性实验。实验学时2 学时,必做实验。实验内容1、用 DDA 算法或中点(Besenham)算法实现直线段的绘制。2、用中点(Besenham)算法实现椭圆或圆的绘制。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用 VC+语言编写源程序;3
8、、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。原理分析 DDA 算法分析假设 直线的起点坐标为 P1 (x1,y1),终点坐标为 P2 (x2,y2), x 方向的增量为 xx2x1 ;y 方向上增量为 yy2y1,直线的斜率为 kyx当 xy 时,让 x 从 x1 到 x2 变化,每步递增 1,那么,x 的变化可以表示为 xi+1xi1,y 的变化可以表示为 yi+1yik 用上式可求得图中直线 P1P2 和 y 向网格线的交点,但显示时要用舍入 找到最靠近交点处的象素点耒表示。
9、当 x0,则 yi+1=yi+1,否则 yi+1=yi。将式(1)、(2)、(3)代入 d1-d2,再用 dx 乘等式两边,并以 Pi=(d1-d2) dx 代入上述等式,得 Pi = 2xidy-2yidx+2dy+(2b-1) dx d1-d2 是用以判断符号的误差。由于在 1a 象限,dx 总大于 0,所以 Pi 仍旧可以用作判断符号的误差。Pi+1 为Pi+1 = Pi+2dy-2(yi+1-yi) dx求误差的初值 P1,可将 x1、y1 和 b 代入式(2.4)中的 xi、yi 而得到 P1 = 2dy-dx 综述上面的推导,第 1a 象限内的直线 Bresenham 算法思想如下
10、: 画点(x1, y1),dx=x2-x1,dy=y2-y1,计算误差初值 P1=2dy- dx,i=1; 求直线的下一点位置 xi+1 = xi + 1 如果 Pi0,则 yi+1=yi+1,否则 yi+1=yi; 画点(xi+1, yi+1); 求下一个误差 Pi+1,如果 Pi0,则 Pi+1=Pi+2dy-2dx,否则 Pi+1=Pi+2dy; i=i+1;如果 i1) for(x=xa;xSetPixel(x, int(y+0.5),c); y=y+k;else for (y=ya;ySetPixel(int(x+0.5),y,c);x=x+1/k;ReleaseDC(pDC);/中
11、点生成直线算法中点生成直线算法void CmyView: OnMidPointline() CDC* pDC=GetDC();/获得设备指针 int xa= ,ya= ,xb= ,yb= ,c=RGB(255,0,0); float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*a+b; x=xa,y=ya; pDC-SetPixel(x,y,c); while(xxb) if (dSetPixel(x, y,c);ReleaseDC(pDC);/Bresenham 直线算法直线算法void CmyView: OnBresenham
12、line() CDC* pDC=GetDC();/获得设备指针 int x1= ,y1= ,x2= ,y2= ,c=RGB(255,0,0); int s1,s2,interchange;else interchage=0;f=2*deltay-deltax;pDC-SetPixel(x,y,c);for(i=1;i=0) if(interchange=1) x+=s1; float x,y,deltax,deltay,f,temp; x=x1; y=y1; deltax=abs(x2-x1); dletay=abs(y2-y1); if(x2-x1=0) s1=1; else s1=-1;
13、if(y2-y1=0) s2=1; else s2=-1; if(deltaydeltax)temp=deltax;deltax=deltay;deltay=temp;interchange=1; else y+=s2; pDC-SetPixel(x,y,c); f=f-2*deltax;else if(interchange=1) y+=s2; else x+=s1; f=f+2*deltay;ReleaseDC(pDC);圆的圆的 Bresenham 算法算法设圆的半径为 r。先考虑圆心在(0, 0),并从 x=0、y=r,开始的顺时针方向的 1/8 圆周的生成过程。在这种情况下,x 每步
14、增加 1,从 x=0 开始,到 x=y 结束。即有xi+1 = xi + 1相应的 yi+1 则在两种可能中选择:yi+1 = yi 或者 yi+1 = yi-1选择的原则是考察精确值 y 是靠近 yi 还是靠近 yi-1(如右图),计算式为y2 = r2-(xi+1)2d1 = yi2-y2 = yi2-r2+(xi+1)2d2 = y2-(yi-1)2 = r2-(xi+1)2-(yi-1)2令 pi=d1-d2,并代入 d1、d2,则有pi = 2(xi+1)2 + yi2 + (yi-1)2-2r2pi 称为误差。如果 pi0 则 yi+1=yi,否则 yi+1=yi-1。pi 的递归
15、式为pi+1 = pi + 4xi +6+2(yi2+1- yi2) -2(yi+1-yi)pi 的初值由上式代入 xi=0,yi=r 而得p1 = 3-2r根据上面的推导,圆周生成算法思想如下: 求误差初值,p1=3-2r,i=1,画点(0, r); 求下一个光栅位置,其中 xi+1=xi+1,如果 pi0 则 yi+1=yi,否则 yi+1=yi-1; 画点(xi+1, yi+1); 计算下一个误差,如果 pi0 则 pi+1=pi+4xi+6,否则 pi+1=pi+4(xi-yi)+10; i=i+1,如果 x=y 则结束,否则返回步骤 2。附注说明:有关的源码:中点画圆算法:中点画圆算
16、法:void CMyView:OnMidpointCircle()CDC *pDC=GetDC();int xc= ,yc= ,r = ,c=0;int x,y;float d;x=0,y=r,d=1.25-r;描点(x,y)以及其他七个对称点;while(x=y) if(d0) d+=2*x+3; else d+=2*(x-y)-5; y-;x+;描点(x,y)以及其他七个对称点;Bresenham 画圆算法:画圆算法:void CMyView:OnBresenhmaCircle()CDC *pDC=GetDC();int xc= ,yc= ,r = ,c=0;int x=0,y=r,p=3
17、-2*r;while(xy) 描点(x,y)以及其他七个对称点;if(p0) p+=4*x+6; else p+=4*(x-y)+10; y-; x+;if(x=y)描点(x,y)以及其他七个对称点;实验二、实验二、 图形的裁剪图形的裁剪实验目的1、通过实验,进一步理解和掌握 Cohen_Sutherland 裁剪算法;2、掌握用 Cohen_Sutherland 裁剪算法裁减多边形的基本过程3、通过编程,会在 VC+环境下用 Sutherland_Hogman 算法编程实现用矩形窗口对多边形的裁剪。实验属性该实验为验证性实验。实验学时2 学时,必做实验实验内容用 Cohen_Sutherla
18、nd 算法编程实现用矩形窗口对直线的裁剪。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用 VC+语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。原理分析Cohen-Sutherland 直线剪裁算法直线剪裁算法以区域编码为基础,将窗口及其周围的,8 个方向以 4 bit 的二进制数进行编码。右图所示的编码方法将窗口及其邻域分为 5 个区域: 内域:区域(0000)。 上域:区域(1001, 1000, 1010)。 下域:区域(01
19、01, 0100, 0110)。 左域:区域(1001, 0001, 0101)。 右域:区域(1010, 0010, 0110)。 当线段的两个端点的编码的逻辑“与”非零时 ,线段为显然不可见的,对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右;该算法的思想算法的思想是:对于每条线段 P1P2分为三种情况处理。 (1)若 P1P2完全在窗口内,则显示该线段 P1P2简称“取”之。 (2)若 P1P2明显在窗口外,则丢弃该线段,简称“弃”之。 (3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另
20、一段重复上述处理。裁剪一条线段时,先求出 P1P2所在的区号 code1,code2。若 code1=0,且 code2=0,则线段 P1P2在窗口内,应取之。若按位与运算 code1&code20,则说明两个端点同在窗口的上方、下方、左方或右方。可判断线段完全在窗口外,可弃之。否则,按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。在对另一段重复上述处理。在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为 0,才把线段与对应的窗口边界求交。附注说明:1、有关的源码:Cohen-SutherlandCohen
21、-Sutherland 裁减算法裁减算法#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8int encode(float x,float y) int c=0; if(xXR) c|=RIGHT; if(xYB) c|=BOTTOM; if(xYT) c|=TOP; retrun c;void CS_LineClip(x1,y1,x2,y2,XL,XR,YB,YT)/float x1,y1,x2,y2,XL,XR,YB,YT;(x1,y1)(x2,y2)为线段的端点坐标,其他四个参数定义窗口的边界 int code1,code
22、2,code; code1=encode(x1,y1); code2=encode(x2,y2); while(code1!=0 |code2!=0) if(code1&code2 !=0) return; code = code1; if(code1=0) code = code2; if(LEFT&code !=0) x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1); else if(RIGHT&code !=0) x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1); else if(BOTTOM&code !=0) y
23、=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);else if(TOP & code !=0) y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1); if(code =code1) x1=x;y1=y; code1 =encode(x,y);else x2=x;y2=y; code2 =encode(x,y); displayline(x1,y1,x2,y2);实验三、几何图形变换实验实验三、几何图形变换实验实验目的1、通过实验,运用计算机图形学的知识、原理和算法;2、掌握二维和三维图形几何变换;3、通过使用 VC+编程环境实现图形几何变换;实验属性
24、该实验为验证性实验。实验学时2 学时,必做实验实验内容1、 在 VC+编程环境下建立二维平面图形(长方形)实现其缩放、平移、旋转几何变换;2、 在 VC+编程环境下建立三维立方体,实现缩放、平移、旋转等几何变换,。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用 VC+语言编写源程序;3、编辑源程序并进行调试;4、进行特殊模式的运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。基础知识及原理二维变换矩阵二维变换矩阵二维几何变换包括平移、旋转和变比 3 种基本变换,变换公式都可以表示为
25、33的变换矩阵和齐次坐标相乘的形式。分别为: 1平移的矩阵运算表示: 2旋转的矩阵运算表示为:xyxy 3变比的矩阵运算表示为: xyxy 、三维变换矩阵三维变换矩阵三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和 44 变换矩阵的乘积。下面分别以公式,矩阵乘积和简记符号来描述三维几何变换。并记变换前物体的坐标为 x,y,z;变换后物体的坐标为 x,y,z。一、平移设 Tx,Ty,Tz 是物体在三个坐标方向上的移动量,则有公式: xxTx yyTy zzTz矩阵运算表达为:x y z 1x y z 1二、旋转旋转分为三种基本旋转:绕 z 轴旋转,绕 x 轴旋转,绕 y 轴旋转。在下述旋转变换公式中,设旋转的参考点在所绕的轴上,绕轴转 角,方向是从轴所指处往原点看的逆时针方向(见下图形) 。 1绕 z 轴旋转的公式为: xxcosysin yxsinycos zz矩阵运算的表达为:x y z 1x y z 12绕 x 轴旋转的公式为: xx yycoszsin zysinzcos矩阵运算的表达为:x y z 1x y z 1绕 z
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风险管理的实施与案例分析计划
- 新余学院《综合英语》2022-2023学年第一学期期末试卷
- 新余学院《商务英语写作》2022-2023学年第一学期期末试卷
- 西南林业大学《中国文学批评史》2021-2022学年第一学期期末试卷
- 西南林业大学《大学语文》2021-2022学年第一学期期末试卷
- 西南交通大学《安全运算》2022-2023学年第一学期期末试卷
- 西京学院《版面设计》2023-2024学年第一学期期末试卷
- 西南交通大学《微机与接口技术实验》2023-2024学年第一学期期末试卷
- 2024年01月11189政府经济学期末试题答案
- 西昌学院《中国文学批评》2022-2023学年第一学期期末试卷
- 中式烹调技术课件
- 高中数学大单元教学设计研究
- 10kV供配电系统电气设备改造投标方案(技术方案)
- 江苏省2024年中考数学试卷九套合卷【附答案】
- 山东教育出版社初中美术 七年级上册第二单元 读书、爱书的情结 单元教学设计
- 2024年建投集团公开招聘工作人员高频500题难、易错点模拟试题附带答案详解
- 2024秋期国家开放大学专科《毛泽东思想和中国特色社会主义理论体系概论》一平台在线形考(专题检测一)试题及答案
- 2024年中国物流集团限公司夏季招聘高频500题难、易错点模拟试题附带答案详解
- RhD抗原阴性孕产妇血液安全管理专家共识
- 《复发性流产诊治专家共识2022》解读
- 生活垃圾制RDF焚烧发电项目可行性研究报告
评论
0/150
提交评论