武汉大学计算机图形学复习整理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学复习整理qfj_2011.1.16

一、图形设备、系统和应用

1、图形系统的组成

图形系统可定义为是计算机硬件、图形输入输出设备、计算机系统软件和图形软件的集合。

一个计算机图形系统起码应具有计算、存储、对话、输入、输出等5个功能。

2、颜色查找表P16

为避免帧缓存的增加,采用颜色查找表来提高灰度级别。帧缓存中数据为颜色查找的索引,颜色查找表必须有2N项,每一项具有W位字宽。当W大于N时,可有2W灰度等级,但每次只有2N个不同灰度等级可用。若要使用2N种以外的灰度等级,需改变颜色查找表中的内容。

1、标准化的作用(1)方便不同系统间的数据交换;(2)方便程序移植;(3)硬件隔离,实现图形

系统的硬件无关性。

2、图形标准的组成、分类

(1)面向图形设备标准:计算机图形元文件(CGM) ,(CRT,绘图仪,打印机,…);计算机图形接口(CGI) ,(设备驱动程序)

(2)面向图形软件标准:官方标准(标准组织制定的标准):GKS(Graphical Kernel System) ,PHIGS(Programmer’s Hierarchical Interactive Graphics System) ,其它数据标准

工业标准(事实上的标准):SGI 等公司的OpenGL ,微软公司的DirectX ,Adobe 公司的PostScript 等等

(3)文件格式标准:基本图形转换规范(IGES );产品数据转换规范(STEP )

1、用户接口的常用形式P130

(1)子程序库:这种形式的基本思想是选择一种合适的高级程序设计语言(如C,C++,Fortran等)作为主语言,用此主语言扩展一系列的过程或函数调用,用以实现有关的图形设计和处理。

GKS ,OpenGL 等

优点:使用方便、便于扩充、便于将用户自己编写的源程序或目标代码加入相应的子程序中,并且可以充分利用高级语言本身具有的功能。

不足:但需要用户熟悉某种通用程序设计语言,修改麻烦,不形象直观。

(2)专用语言:一般为解释性的语言。PostScript ,VRML 等

(3)交互命令:图形界面或命令行方式,进行人机交互。常用操作:增、删、改操作(常用三表结构实现)

2、输入控制

(1)请求方式(程序初始化设备,即输入设备的初始化是在应用程序中设置的。)

缺点:效率低,不能同时工作。

(2)取样方式(程序和设备同时工作)

优点:该模式不像请求模式那样要求用户有一明显的动作,它对连续的信息流输入比较方便,也可同时处理多个输入设备的输入信息。

缺点:当处理某一种输入耗费的时间较长时,可能会失掉某些输入信息。

(3)事件方式(设备初始化程序):输入设备和程序独立运行。

2、区域填充(边界的处理应注意的问题,活化边表算法,种子点,连通区域的

概念及其边界条件)

(1)边界的处理应注意的问题

存在问题:

1)多边形顶点与扫描线相交,交点数量计算不当会产生交点配对错误。

解决方式:下闭上开;

2)边界像素是否填充,处理不当造成填充不足或填充范围扩大化。

解决方式:左闭右开

(2)活化边表算法

扫描线算法:

对于一条扫描线填充过程可以分为四个步骤:(1)求交(2)排序(3)配对(4)填色

假定当前扫描线与多边形某一条边的交点的x坐标为x,则下一条扫描线与该边的交点不要重计算,只要加一个增量△x。

设该边的直线方程为:

ax+by+c=0

若y =y i ,x =x i ;则当y = y i+1 时(即到下一条扫描线时):

;)(111a

b x

c y b a x i i i i -=-⋅-=++ 其中 a

b

x -=∆ 为常数

优点:

充分利用了多边形各边的连续性和扫描线的连贯性,减少了求交计算,提高了效率; 缺点:

数据结构复杂,只适宜纯软件方式实现,很难用硬件实现。

(3)种子点,连通区域的概念及其边界条件 P185

种子点算法原理:假设在多边形区域内部有一已知像素,由此出发找到区域内的所以元素。

4连通的区域: 取区域内任意两点,在该区域内若从其中一点出发通过上、下、左、右四种运动可到达另一点。

8连通区域: 取区域内任意两点,若从其中任一点出发,在该区域内通过沿水平方向、垂直方向和对角线方向的八种运动可到达另一点。 简单的种子点填充算法:

给定区域G 一种子点(x , y )首先判断该点是否是区域内的一点,如果是,则将该点填充为新的颜色,然后将该点周围的四个点(四连通)或八个点(八连通)作为新的种子点进行同样的处理,通过这种扩散完成对整个区域的填充 。

存在问题:多个像素重复入栈,带来了效率和存储空间的问题 扫描线种子填充算法:

① 将算法设置的堆栈置为空。将给定的种子点(x, y )压入堆栈; ② 如果堆栈为空,算法结束;否则取栈顶元素(x, y )作为种子点;

③ 从种子点(x, y )开始,沿纵坐标为y 的当前扫描线向左右两个方向逐个像素用新的颜色值进行填充,直到边界为止。设区间两边界的横坐标分别为xleft 和xright ;

④在与当前扫描线相邻的上下两条扫描线上,以区间[xleft,xright]为搜索范围,求出需要填充的各小区间,把各小区间中最右边的点并作为种子点压入堆栈,转到②。

3、裁减(编码裁剪、中点分割算法、多边形的逐边裁剪算法及注意的问题)P199 (1)编码裁剪:Cohen-Sutherland裁剪

基本思想:

对于每条线段P1P2分为三种情况处理分为三种情况处理:

若P1P2完全在窗口内,则显示该线段;

若P1P2明显在窗口外,则丢弃该线段;

若线段不满足①或②的条件,则在窗口(或其延长线)与线段的交点处把线段分为两段。其中一段完全在窗口外,可弃之;然后对另一段重复上述处理。

为快速判断,采用如下编码方法:每个区域赋予4 位编码

算法:

①对线段的两个端点P1、P2进行按其所处的位置进行编码,分别记为code1、code2;

②如果code1=0且code2=0,说明线段在窗口内,全部可见;否则到③;

③若code1&code2≠0,则说明线段在某一窗口边的延长线的外侧,全部不可见;否则到④;

④在线段与窗口延长线的交点处把线段分为两段,并对两段分别编码。其中交点看作是两个点,一个在与之相交的窗口延长线外侧,一个在内侧。两段线段分别进行①~④的判断过程,则其中一段必然符合③的条件,可弃之;另一段重复①~④的处理,直到剩余部分的线段完全可见或完全不可见。

(2)中点分割算法

基本思想:

与前一种Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况:

①完全可见;

②完全不可见;

③部分可见。

相关文档
最新文档