计算机图形学2
计算机图形学基础教程(第2版)
图书前言
本书是在2005版《计算机图形学基础教程》的基础上修订而成。 《计算机图形学基础教程》是根据作者在清华大学多年教学实践,并参考了国内外最新的相关教材和部分最 新的研究成果编写而成。第2版教材主要修订了以下内容: 1.增加了第1章的1.5节,介绍清华大学近年来的最新研究成果。 2.增加了第3章的3.9节,介绍格表示、简化与细分。 3.增加了第4章的4.1节,介绍图形绘制的基本概念和流程,提高本章整体上的可读性。 4.将第4章4.8节层次细节的内容移入第3章的3.9节,增加有关景物模拟的内容。 5.删除第5章VRML的内容,改写Open GL的内容,增加一些常见的功能,并给出更多的示例。 本教程第1版出版4年来,被国内一大批高等院校采用,相关的老师、同学及读者提出了许多宝贵的建议,在 此表示衷心感谢。徐昆、来煜坤参与了第2版教材的修订,在此也一并表示感谢。
序言
清华大学计算机系列教材已经出版发行了近30种,包括计算机专业的基础数学、专业技术基础和专业等课程 的教材,覆盖了计算机专业大学本科和研究生的主要教学内容。这是一批至今发行数量很大并赢得广大读者赞誉 的书籍,是近年来出版的大学计算机教材中影响比较大的一批精品。
本系列教材的作者都是我熟悉的教授与同事,他们长期在第一线担任相关课程的教学工作,是一批很受大学 生和研究生欢迎的任课教师。编写高质量的大学(研究生)计算机教材,不仅需要作者具备丰富的教学经验和科 研实践,还需要对相关领域科技发展前沿的正确把握和了解。正因为本系列教材的作者们具备了这些条件,才有 了这批高质量优秀教材的出版。可以说,教材是他们长期辛勤工作的结晶。本系列教材出版发行以来,从其发行 的数量、读者的反映、已经获得的许多国家级与省部级的奖励,以及在各个高等院校教学中所发挥的作用上,都 可以看出本系列教材所产生的社会影响与效益。
计算机图形学第2章图形系统
2、荫罩式
根据屏幕上荧光点的排列不同,控制栅也就不 一样。普通的显示器一般用三角的排列方式,这 种显像管被称为荫罩式显像管。荫罩法常用于光 栅扫描系统,因为它能产生的彩色范围比电子束 穿透法宽广得多。
三色荧光屏
荫罩
三个电子枪
能显示16兆种颜色的显示系统叫做真彩色显示系统
3、荫栅式
普通的显象管采用的都是荫罩式显象管,显象管 的表面呈略微凸起的球面状,故称之为“球面管”。 荫罩式球面显示器几何失真大,而且三角形的荧光 点排列造成即使点很密很细也不会特别清晰,所以 近几年荫栅式显示器逐渐流行起来。
喷绘仪实物图
四、静电设备
静电设备沿纸的宽度方向一次一整行地置负电 荷于纸上,尔后,面对调色剂曝光。调色剂充以 正电,被吸引到充以负电的区域,从而产生指定 的输出。 静电绘图仪分辨率可达200dpi,其速度比笔绘 仪高,运行可靠,噪声小,但用纸特殊而价格昂 贵。
静电绘图仪结构图
五、电热式设备
电热式利用点阵打印头的热度,在热感应纸上输 出图案。
二、激光设备
在激光设备里,激光束把要打印的图形写在感光 鼓上,鼓再把这一图形转移到纸上。激光打印机 的主要构成部分有感光鼓、炭粉、打底电晕丝和 转移电晕丝。
激光打印机结构图
三、喷墨设备
喷墨法产生的输出,是沿包裹在鼓上的纸卷逐行 喷墨水来实现的。在高压下墨水形成墨雾,充电 荷的墨雾在电场控制下发生偏转,将墨雾喷印到 纸上。
热升华打印机
六、笔绘仪
笔绘仪有一支或多支笔安装在横跨纸的笔架或滑杆 上,各种彩色和不同粗细的笔用来绘制各种阴影和 线型。与前面几种点阵硬拷贝设备不同,笔绘仪属 于随机画线硬拷贝设备。 笔绘仪的绘图速度取决于绘图笔移动的速度和 加速度。这里,加速度和笔绘仪笔头的质量有关。
计算机图形学2
当 △x>△y 时,让 x 从 x1 到 x2 变化,每
步递增 1,
那么,x 的变化可以表示为 xi+1=xi+1
y 的变化可以表示为 yi+1=yi+k
2.1.1 直线DDA算法 (Digital Differential Analyser)
用上式可求得图中直线 P1P2 和 y 向网格线的交点, 但显示时要用舍入, 找到 最靠近交点处的象素点耒 表示。 当 △x<△y 时,让 y 递 增 1,x作相应变化。
2.1.1 直线的扫描转换——中点画线算法
在d≥0时,取正右方像素点P1,则下一个中点M 坐标:M1(xp+2,yp+0.5),则下一个像素点的判 别式 d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)+c=d+a 故d的增量为a。
而若d<0,则取右上方像素点P2,则下一个中点M 坐标:M2(xp+2,yp+1.5),则下一个像素点的判 别式
2.1.2 直线Bresenham算法( 续)
求误差的初值P1,可将x1、y1和b代入式(2.4)中的xi、 yi而得到 P1 = 2dydx 综述上面的推导,第1a象限内的直线Bresenham算法 思想如下: ⒈ 画点(x1, y1),dx=x2x1,dy=y2y1,计算误差初值 P1=2dy dx,i=1; ⒉ 求直线的下一点位置 xi+1 = xi + 1 如果Pi>0,则yi+1=yi+1,否则yi+1=yi; ⒊ 画点(xi+1, yi+1); ⒋ 求下一个误差Pi+1,如果Pi>0,则Pi+1=Pi+2dy2dx, 否则 Pi+1=Pi+2dy; ⒌ i=i+1;如果i<dx+1则转步骤2;否则结束操作。
《计算机图形学》练习试题及参考答案(二)
《计算机图形学》练习试题及参考答案二、选择题(每题2分)B 1、计算机图形学与计算几何之间的关系是( )。
A)学术上的同义词B)计算机图形学以计算几何为理论基础C)计算几何是计算机图形学的前身D).两门毫不相干的学科B 2、计算机图形学与计算机图象学的关系是( )。
A)计算机图形学是基础,计算机图象学是其发展B)不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C)同一学科在不同场合的不同称呼而已D)完全不同的学科,两者毫不相干C 3、触摸屏是( )设备。
A)输入B)输出C)输入输出D)既不是输入也不是输出B 4.计算机绘图设备一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS A 5. 计算机图形显示器一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS C 6.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( )A)512KB;B)1MB;C)2MB ;D)3MBD 7.哪一个不是国际标准化组织(ISO)批准的图形标准?( )A)GKS;B)PHIGS;C)CGM ;D)DXF C8.下述绕坐标原点逆时针方向旋转a角的坐标变换矩阵中哪一项是错误的? ( )| A B || C D |A) cos a;B) sin a;C) sin a;D) cos aA 9、在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S 到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的? ( )A)S和P均在可见的一侧,则输出S和P.B)S和P均在不可见的一侧,则输出0个顶点.C)S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点.D)S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.C 10、在物体的定义中对边的哪条限制不存在? ( )A) 边的长度可度量且是有限的B) 一条边有且只有两个相邻的面C) 一条边有且只有两个端点D) 如果一条边是曲线,那么在两个端点之间不允许曲线自相交D11.下述哪一条边不是非均匀有理B样条(NURBS)的优点? ( )A) NURBS比均匀B样条能表示更多的曲面B) 对于间距不等的数据点,用NURBS拟合的曲线比用均匀B 样条拟合的曲线更光滑C) NURBS提供的权控制方法比用控制点更能有效的控制曲线的形状D) 使用NURBS可以提高对曲面的显示效率C 12.下列关于图的存储表示的叙述中,哪一个是不正确的?A) 无向图的相邻矩阵是对称矩阵B) 对于带权的图,其相邻矩阵中值为1的元素,其值可以用边的权来权替C) 用邻接表法存储包括n个结点的图需要保存一个顺序存储的结点表和n个链接存储的边表D) 用邻接表法存储包括n条边的图需要保存一个顺序存储的结点表和n个链接存储的边表C13*.在面片的数量非常大的情况下哪一个消隐算法速度最快? ( )A) 深度缓存算法(Z-Buffer)B) 扫描线消隐算法C) 深度排序算法(画家算法)D) 不知道B14*.下面关于深度缓存消隐算法(Z-Buffer)的论断哪一条不正确? ( )A) 深度缓存算法并不需要开辟一个与图像大小相等的深度缓存数组B) 深度缓存算法不能用于处理对透明物体的消隐C) 深度缓存算法能并行实现D) 深度缓存算法中没有对多边形进行排序D15.在用射线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确? ( )A) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次B) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次C) 当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次D) 当射线与多边形的某边重合时,计数1次D 16*、扫描消隐算法在何处利用了连贯性(相关性Coherence)?(1)计算扫描线与边的交点;(2)计算多边形在其边界上的深度;(3)计算多边形视窗任意点处的深度值;(4)检测点与多边形之间的包含性。
计算机图形学二、多边形的扫描转换算法
2
做一个
E
2
A
C C
2
D
B
2
局部极大或局部极小点, 交点看做是二个
非局部极值点,交点看
2
做一个
E
非局部极值点将这些相
邻边分割开来
2
A
如何计算扫描线与多边形边界线的所有交点?
若扫描线yi与多边形边界线交点的x坐标是xi, 则对下一条扫描线yi+l,它与那条边界线的交点的x 坐标xi+1,可如下求出:
m
yi1 yi xi1 xi
, yi1
yi
1
xi 1
xi
1 m
扫描线与多边形边的交点计算 C
B
yk 1 yk
x AC k 1
xkAC
1 mAC
x BC k 1
xkBC
1 mBC
A
活跃(活性)边:与当前扫描线相交的边 活跃(活性)边表AET:存贮当前扫描线相交的各边的表。
ymax x 1/m next
…
扫描线5 扫描线6
e2 92 0
e2 92 0
e6 5 13 6/4 λ
e5 11 13 0 λ
9∧
8∧
e3
e4
7
9 7 -5/2
11 7 6/4 λ
e5
6
11 13 0 λ
5∧
e2
e3
4
9 2 0λ
3∧
e2
2∧
e1
e6
1
3 7 -5/2
5 7 6/4 λ
e1
0∧
ymax xmin 1/m
e4 e5
e6 5 111/2 6/4 λ
9∧
计算机图形学CHP2图形系统
2.1 图形系统的基本功能和体系结构
二、图形系统硬件性能要求:
处理速度(与硬件、软件和处理算法都有关) 存储容量(内存、外存、显存) 处理精度(图形分辨率、色彩显示等)
2.1 图形系统的基本功能和体系结构
三、计算机图形系统的基本组成:
图形应用数据结构
图形软件
图形应用软件
图
形
图形支撑软件
系
统
2.3 图形显示系统
2.3.1 图形显示系统的组成:
1. 显示器—图形显示设备; 2. 显示卡— 又名显示适配器,将CPU送来的图形
信号经过处理后输送至显示器。 显示卡工作过程: 1)CPU通过总线将数据传送到显示芯片; 2)显示芯片对数据处理并将结果存放在显存中; 3)显卡从显存中将数据传送到RAMDAC(数模转换芯 片)并进行数模转换; 4)RAMDAC将模拟信号输送到显示器。
2.3.2 图形显示设备
一、CRT显示器:
刷新式CRT显示器 光栅扫描显示器 随机扫描显示器 彩色CRT显示器 直视存储管显示器
2.3.2 图形显示设备 (一) 刷新式 CRT (Cathode Ray Tube)
工作原理:电子枪(Electron Gun)发射电子束,经过 聚焦系统(Focusing System)、偏转系统(Deflection System)的作用,轰击到荧光屏的不同部位,被其内表 面的荧光物质吸收,发光产生可见的图形。
• CGI--Computer Graphics Interface(图形接口) • OpenGL--Open Graphics Library(较流行,业
界认可)
2.2 图形软件和标准
• GKS-计算机图形核心系统
• ISO的第一个图形软件标准(第一个官方标准, 1977)
最新2019-计算机图形学第二章-PPT课件
是一维线性表,其每一项的内容对应一种颜色,它的 长度由帧缓存单元的位数决定,例如:每单元有8位, 则查色表的长度为28=256 目的:在帧缓存单元的位数不增加的情况下,具有大 范围内挑选颜色的能力:
2.1.4 光栅扫描的示系统 存放方式
颜色信息在帧缓存中两种存放方式:一是颜色值 直接存储在帧缓存中。二是把颜色码放在一个独 立的表中,帧缓存存放的是颜色表中各项的索引 值,颜色范围扩充了。 单色系统:查色表固化 彩显:可修改、创建查色表。
GKS
-- 提供了在应用程序和图形输入输出设备之间的 功能接口。 -- 与语言无关。 -- GKS提供了一个称为元文件的顺序文件接口 -- 应用程序的所有图形资源由GKS控制(通过 GKS元文件-GKSM) -- GKSM用于:图形信息存档;系统传送图形信息;
在GKS应用程序间传送图形信息; 与图形信息相关的非图形信息的存储和复用。
2.1 图形显示器
2.1.1 阴极射线管
2.1.2 彩色阴极射线管 射线穿透法 影孔板法 2.1.3 随机扫描显示系统
2.1.4 光栅扫描系统
2.1.1 阴极射线管
阴极射线管(CRT)
–组成:包括电子枪、聚焦系统、加速电极、偏转系统、荧光屏 –工作原理:电子枪发射电子束,经过聚焦系统、加速电极、
2.1.2 彩色阴极射线管
影孔板法
原理:影孔板被安装在荧光屏的内表面,用于精 确定位像素的位置
影孔板
外层玻璃
荧光涂层
2.1.2 彩色阴极射线管
影孔板的类型 点状影孔板 代表:大多数球面与柱面显像管 栅格式影孔板 代表:Sony的Trinitron与Mitsubishi的 Diamondtron显像管
计算机图形学课件之第2章图形输入输出设备
颜色模式决定了图像中颜色的表示方式,常见的颜色模式有RGB、CMYK等。不 同的颜色模式适用于不同的应用场景,例如RGB适用于显示器显示,CMYK适用 于印刷。
扫描速度
扫描速度
扫描速度是指扫描仪在单位时间内能够扫描的面积,通常以 平方英寸/分钟(sq in/min)或毫米/秒(mm/s)表示。扫 描速度越快,扫描大型图像所需的时间就越短。
扫描类型
扫描类型包括平板扫描、胶片扫描和3D扫描等,不同类型的 扫描仪适用于不同的应用场景。平板扫描仪适用于普通文档 和照片扫描,胶片扫描仪适用于胶片扫描,3D扫描仪适用于 物体表面形状和纹理的扫描。
打印速度
打印速度
打印速度是指打印机在单位时间内能够打印的页面数量,通常以页/分钟( ppm)或页/秒(pps)表示。打印速度越快,打印大型文件所需的时间就越短 。
打印技术
打印技术是影响打印速度的重要因素,常见的打印技术有喷墨、激光、热转印 等。不同类型的打印技术适用于不同的应用场景,例如喷墨打印机适用于彩色 打印,激光打印机适用于黑白文档打印。
04
图形输入输出设备的 应用
办公自动化
文字处理
使用图形输入设备如键盘和鼠标 进行文档编辑,输出设备如打印 机进行打印输出。
数据可视化
利用图形输出设备展示数据,如 柱状图、饼图等,便于理解和分 析。
图像处理
图片编辑
使用图形输入设备如数码相机、扫描 仪获取图片,通过图形处理软件进行 编辑,再由输出设备如打印机输出。
特效制作
利用图形处理软件进行特效制作,如 滤镜、色彩调整等,丰富图像表现力 。
计算机辅助设计(CAD)
绘图设计
等。
触摸屏在移动设备和一些桌面应 用中广泛使用。
计算机图形学试题及答案 (2)
一、 判断题(10x1=10分)1、 构成图形的要素可分为两类:刻画形状的点、线、面、体的非几何要素与反映物体表面属性或材质的明暗、色彩等的几何要素。
( 错误 )2、 参数法描述的图形叫图形;点阵法描述的图形叫图像。
( 正确 )3、 EGA/VGA 为增强图形显示效果的一种图形处理软件的名称。
( 错误 )4、 对山、水等不规则对象进行造型时,大多采用过程式模拟方法。
( 正确 )5、 若两个图形是拓扑等价的,则一个图形可通过做弹性运动与另一个图形相重合。
( 正确 )6、 0阶参数连续性和0阶几何连续性的定义是相同的。
( 正确 )7、 Bezier 曲线可做局部调整。
( 错误 )8、 字符的图形表示分为点阵和矢量两种形式。
( 正确 )9、 LCD 表示发光二极管显示器。
( 错误 )10、 使用齐次坐标可以将n 维空间的一个点向量唯一的映射到n+1维空间中。
( 错误 ) 二、 填空题(15x2=30分)1、目前常用的PC 图形显示子系统主要由3个部件组成:(1)帧缓冲存储器、(2)显示控制器、(3)ROM BIOS 。
2、 图形的输入设备有(4)键盘、鼠标、光笔(至少写三种);图形的显示设备有(5)CRT 显示器、LCD 、投影仪(至少写三种)。
3、常用坐标系一般可以分为:建模坐标系、用户坐标系、(6观察坐标系、(7)规格化设备坐标系、(8)设备坐标系。
4、在多边形的扫描转换过程中,主要是通过确定穿越多边形区域的扫描线的覆盖区间来填充,而区域填充则是从(9)给定的位置开始涂描直到(10)指定的边界条件为止。
5、一个交互式计算机图形系统应具有(11)计算 、(12)存储、(13)对话、(14)输入和输出等五个方面的功能。
三、 简答题(5x6=30分)1、 请列举常用的直线段裁减算法(四种)。
答:答:直接求交算法、编码算法、中点再分算法、Cyrus-Beck 算法。
2、 考虑三个不同的光栅系统,分辨率依次为480640⨯,10241280⨯,20482560⨯。
计算机图形学第二版课后习题答案
第一章绪论概念:计算机图形学、图形、图像、点阵法、参数法、图形的几何要素、非几何要素、数字图像处理;计算机图形学和计算机视觉的概念及三者之间的关系;计算机图形系统的功能、计算机图形系统的总体结构。
第二章图形设备图形输入设备:有哪些。
图形显示设备:CRT的结构、原理和工作方式。
彩色CRT:结构、原理。
随机扫描和光栅扫描的图形显示器的结构和工作原理。
图形显示子系统:分辨率、像素与帧缓存、颜色查找表等基本概念,分辨率的计算第三章交互式技术什么是输入模式的问题,有哪几种输入模式。
第四章图形的表示与数据结构自学,建议至少阅读一遍第五章基本图形生成算法概念:点阵字符和矢量字符;直线和圆的扫描转换算法;多边形的扫描转换:有效边表算法;区域填充:4/8连通的边界/泛填充算法;内外测试:奇偶规则,非零环绕数规则;反走样:反走样和走样的概念,过取样和区域取样。
5.1.2 中点 Bresenham 算法(P109)5.1.2 改进 Bresenham 算法(P112)习题答案习题5(P144)5.3 试用中点Bresenham算法画直线段的原理推导斜率为负且大于1的直线段绘制过程(要求写清原理、误差函数、递推公式及最终画图过程)。
(P111)解: k<=-1 |△y|/|△x|>=1 y为最大位移方向故有构造判别式:推导d各种情况的方法(设理想直线与y=yi+1的交点为Q):所以有: y Q-kx Q-b=0 且y M=y Qd=f(x M-kx M-b-(y Q-kx Q-b)=k(x Q-x M)所以,当k<0,d>0时,M点在Q点右侧(Q在M左),取左点 P l(x i-1,y i+1)。
d<0时,M点在Q点左侧(Q在M右),取右点 Pr(x i,y i+1)。
d=0时,M点与Q点重合(Q在M点),约定取右点 Pr(x i,y i+1) 。
所以有递推公式的推导:d2=f(x i-1.5,y i+2)当d>0时,d2=y i+2-k(x i-1.5)-b 增量为1+k=d1+1+k当d<0时,d2=y i+2-k(x i-0.5)-b 增量为1=d1+1当d=0时,5.7 利用中点 Bresenham 画圆算法的原理,推导第一象限y=0到y=x圆弧段的扫描转换算法(要求写清原理、误差函数、递推公式及最终画图过程)。
计算机图形学02技术概述解析
CAI, 教学娱乐
娱乐 电脑游戏
➢ 实时性 ➢ 逼真性 ➢ 蕴含了先进的图形处理技术 电视广告,节目片头,科教演示(CAI)
Quake III,“古墓丽影”,“侏罗纪公园”、 “皇帝的新衣”、“完美风暴”………
MAYA, 3DS-MAX, SOFTIMAGE… 计算机艺术
(7) 山、水、花、草、烟云等模糊景物的生成
(8) 三维或高维数据场的可视化
(9) 三维形体的实时显示和图形的并行处理
(10) 虚拟现实环境的生成及其控制算法等
2.2 计算机图形学的发展概况
计算机图形学的起源和发展要追溯到50年 代初期的美国战术防空系统SAGE。
二次大战后美国国防部筹划建立一个实时 信息控制系统监视北美的整个空域和地域。
CAD技术发展历史
GUI 发展的几个主要产品
Xerox Star, 1981 Apple Macintosh 1984
Windows 1995
CAD技术发展历史
1969年,Bell Labs 建立第一个帧缓存framebuffer (3 bits) 1969年,SIGGRAPH 成立 (began as special interest committee in 1967 by Sam Matsa and Andy vanDam) 1969年,ARPANET 诞生 1970年,法国Renault 公司的Pierre Bezier提出一种全新 的数学方法,用于构造汽车自由曲面。由他领导研制的 Unisurf曲面造型和UniAPT曲面加工系统,从1972年起 应用于汽车外形打样和模具加工,为计算机辅助几何设 计CAGD研究方向奠定了基础和发展方向。
2.1 什么是计算机图形学
计算机图形学 第二章 二维基本图形的生成与二维区域的填充
2013-10-21
(2-10)
22
2.1.2 生成直线的Bresenham算法
• 我们来分析公式(2-10): (1)当此值为正时,d1>d2,说明直线上 理论点离(xi+1,yi+1)象素较近,下一个象素 点应取(xi+1,yi+1)。 (2)当此值为负时,d1<d2,说明直线上 理论点离(xi+1,yi)象素较近,则下一个象素 点应取(xi+1,yi)。 (3)当此值为零时,说明直线上理论点 离上、下两个象素点的距离相等,取哪个 点都行,假设算法规定这种情况下取(xi+1, yi+1 2013-10-21 )作为下一个象素点。 23
2.1.2 生成直线的Bresenham算法
• 我们首先讨论m=△y/△x,当0≤m≤1且 x1<x2时的Bresenham算法。从DDA直线算 法可知这些条件成立时,公式(2-2)、(2-3) 可写成: • xi+1=xi+1 (2-6) • yi+1=yi+m (2-7) • 有两种Bresenham算法思想,它们各 自从不同角度介绍了Bresenham算法思想, 得出的误差判别式都是一样的。
2013-10-21 11
2.1.1 生成直线的DDA算法
二、直线DDA算法思想: 选定x2-x1和y2-y1中较大者作为步进方向 (假设x2-x1较大),取该方向上的增量为一个象素 单位(△x=1),然后利用式(2-1)计算另一个方向 的增量(△y=△x· m=m)。通过递推公式(2-2)至(2 -5),把每次计算出的(xi+1,yi+1)经取整后送到显 示器输出,则得到扫描转换后的直线。 之所以取x2-x1和y2-y1中较大者作为步进方 向,是考虑沿着线段分布的象素应均匀,这在下 图中可看出。
计算机图形学2-2(新)
OpenGL独立于硬件设备、窗口系统和操作系统,使得以 OpenGL为基础开发的应用程序可以在各种平台间移植。
OpenGL可以用各种编程语言调用,如C/C++,Java, Fortran,Ada等。
2. OpenGL的主要功能
由于微软在Windows中包含了OpenGL,所以OpenGL 可以与Visual C++紧密接合,简单快捷地实现有关计算和 图形算法,并保证算法的正确性和可靠性。简单地说, OpenGL具有建模、变换、色彩处理、光线处理、纹理影 射、图像处理、动画及物体运动模糊等功能: 1、建模 OpenGL图形库除了提供基本的点、线、多边形的绘 制函数外,还提供了复杂的三维物体,如球、锥、多面体、 茶壶以及复杂曲线和曲面(例如Bezier、Nurbs等曲线或 曲面)的绘制函数。
库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分 别表示该函数属于OpenGL哪个开发库 等,从函数名 后面中还可以看出需要多少个参数以及参数的类型。I 代表int型,f代表float型,d代表double型,u代表无符 号整型。例如 glVertex3fv()表示了该函数属于gl库,参 数是三个float型参数指针。我们用glVertex*()来表示 这一类函数。
8、特殊效果 利用OpenGL还能实现深度暗示(Depth Cue)、运动 模糊(Motion Blur)等特殊效果。运动模糊的绘图方式 (motion-blured),模拟物体运动时人眼观察所感觉的 动感现象。深度域效果(depth-of-effects),类似于照相 机镜头效果,模型在聚焦点处清晰,反之则模糊。 这些三维物体绘图和特殊效果处理方式,说明OpenGL 能够模拟比较复杂的三维物体或自然景观。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国地质大学(武汉)课题:计算机图形学班级:191113姓名:杨耀鹏源程序#include<gl/glut.h>#include<iostream.h>#include<stdlib.h>typedef struct dePt{int x;int y;}dePt;void fill(GLint x1,GLint y1,GLint z1) {glBegin(GL_POINTS);glVertex3f(x1,y1,0.0f);glEnd();}typedef struct Edge{int yUpper;float xIntersect, dxPerScan;struct Edge *next;}Edge;void insertEdge(Edge *list, Edge *edge) {Edge *p,*q=list;p=q->next;while(p!=NULL){if(edge->xIntersect<p->xIntersect)p=NULL;else{q=p;p=p->next;}}edge->next=q->next;q->next=edge;}int yNext(int k, int cnt, dePt*pts){int j;if((k+1)>(cnt-1))j=0;elsej=k+1;while(pts[k].y==pts[j].y)if((j+1)>(cnt-1))j=0;else j++;return (pts[j].y);}void makeEdgeRec(dePt lower, dePt upper,int yComp,Edge *edge,Edge *edges[]) {edge->dxPerScan=(float)(upper.x-lower.x)/(upper.y-lower.y);edge->xIntersect=lower.x;if(upper.y<yComp)edge->yUpper=upper.y-1;elseedge->yUpper=upper.y;insertEdge(edges[lower.y],edge);}void buildEdgeList(int cnt,dePt *pts,Edge *edges[]){Edge *edge;dePt v1,v2;int i,yPrev=pts[cnt-2].y;v1.x=pts[cnt-1].x;v1.y=pts[cnt-1].y;for(i=0;i<cnt;i++){v2=pts[i];if(v1.y!=v2.y){edge=(Edge *)malloc(sizeof(Edge));if(v1.y<v2.y)makeEdgeRec(v1,v2,yNext(i,cnt,pts),edge,edges);elsemakeEdgeRec(v2,v1,yPrev,edge,edges);}yPrev=v1.y;v1=v2;}}void buildActiveList(int scan,Edge *active,Edge *edges[]){Edge *p,*q;p=edges[scan]->next;while(p)q=p->next;insertEdge(active,p);p=q;}}void fillScan(int scan,Edge *active){Edge *p1,*p2;int i;p1=active->next;while(p1){p2=p1->next;for(i=p1->xIntersect;i<p2->xIntersect;i++) fill((int)i,scan,3);p1=p2->next;}}void deleteAfter(Edge *q){Edge *p=q->next;q->next=p->next;free(p);}void updateActiveList(int scan,Edge *active) {Edge *q=active, *p=active->next;while(p)if(scan>=p->yUpper){p=p->next;deleteAfter(q);}else{p->xIntersect=p->xIntersect+p->dxPerScan; q=p;p=p->next;}void resortActiveList(Edge *active) {Edge *q,*p=active->next;active->next=NULL;while(p){q=p->next;insertEdge(active,p);p=q;}}void scanFill(int cnt,dePt *pts){Edge *edges[1024],*active;int i,scan;for(i=0;i<1024;i++){edges[i]=(Edge *)malloc(sizeof(Edge)); edges[i]->next=NULL;}buildEdgeList(cnt,pts,edges);active=(Edge *)malloc(sizeof(Edge)); active->next=NULL;for(scan=0;scan<1024;scan++){buildActiveList(scan,active,edges);if(active->next){fillScan(scan,active); updateActiveList(scan,active); resortActiveList(active);}}}void ChangeSize(GLsizei w,GLsizei h) {GLfloat nRange=400.0f;if(h==0) h=1;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);elseglOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange,-nRange,nRange); glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void Display(void){int n,x,y,i;cout<<"请输入多边形顶点数:"<<endl;cin>>n;dePt *t=new dePt[n];for(i=0;i<n;i++){cout<<"请输入第"<<i+1<<"个顶点坐标"<<endl;cin>>x>>y;t[i].x=x;t[i].y=y;glVertex2i(t[i].x,t[i].y);}glEnd();glFlush();scanFill(n,t);glFlush();glutPostRedisplay();}void Initial(void){glClearColor(2.0f,2.0f,2.0f,2.0f);glMatrixMode(GL_PROJECTION); //指定设置投影参数gluOrtho2D(-100.0,200.0,-100.0,150.0); //设置投影参数}void main(int argc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口的位置glutCreateWindow("多边形的扫描转换与填充"); //设置一个名为多边形的扫描转换与填充的窗口glutDisplayFunc(Display); //设置当前窗口的显示调用函数Initial(); //完成窗口初始化glutMainLoop(); //启动主GLUT事件处理循环}运行结果。