当前位置:
文档之家› 第5讲 计算机图形学消隐算法
第5讲 计算机图形学消隐算法
消隐与透视关系较密切,体现在:
1)消隐必须在投影之前完成;因为消隐需要物 体三维信息,投影后只有二维信息; 2)物体之间的遮挡关系与投影中心(视点) 的选取有关; 3)物体之间的遮挡关系与投影方式有关,在 平行投影时,其遮挡关系可通过深度值来确定。
三、凸多面体隐藏线的消除
凸多面体的每个面要么可见,要么 不可见;不可能出现一个面部分可 见,部分不可见。
消隐算法
主要内容:
一、概述 二、消隐的基本技术
三、凸多面体消除隐藏线
四、消除隐藏面
一、概述
用计算机生成三维形体的真实图形,是计算机图形学研究 的重要内容之一。在使用显示设备描绘三维图形时,必须把三 维信息作某种投影变换,在二维显示表面上绘制出来。 由于投影变换失去了深度信息,往往导致图形的二义性:
y
凸多面体是由若干个平面围成的物体。 假设这些平面方程为: ai x+bi y+ci z+di=0 (i=1,2,…n) x 调整系数的符号,使每个平面的法向 量(ai,bi,ci)指向多面体内部。
z
如果投影方向为(Xp,Yp,Zp),那么 (ai,bi,ci)· (Xp,Yp,Zp)<0时, 此平面为不可见面,在作图时, 此面不绘制。
• 按消隐空间分类
物体空间消隐算法 图像空间消隐算法
线消隐(Hidden-line) 消隐对象是物体上不可见的线,一般用于 线框图。当用笔式绘图仪或其它画线设备绘制 图形时,主要使用这种算法。 面消隐(Hidden-surface) 消隐对象是物体上不可见的面,一般用于 填色图。当用光栅扫描显示器绘制图形时,主 要使用这种算法。
要消除二义性,必须在绘制时消隐实际不可见得线和面, 即消隐。经过消隐的投影图称为物体的真实图形。
• 消隐不仅与消隐对象有关,还与观察者 的位置有关。如图所示,由于视点的位 置不同,物体的可见部分也不同:
C B
D
E2
A
E1
消隐与观察者的位置关系
• 按消隐的对象分类
线消隐(Hidden-line) 面消隐(Hidden-surface)
方法:将投影平面上的窗口分成若干小区域;为 每个小区域建立相关物体表,表中物体的投影于 该区域有相交部分;则在小区域中判断哪个物体 可见时,只要对本区域的相关物体表中的物体进 行比较即可。
复杂度比较: 假定每个小区域的相关物体表中平均有h个 物体,场景中有k个物体,由于物体在场景中的分 布是分散的,显然h远小于k。 根据物空间消隐方法所述,其算法复杂 度为O(h2),远小于O(k2)。
N V
=
2
面的法向量 面上一点指向观察点的向量 cos-1(
2
0<= <
|N||V| ) .
N.V
N N
V >0 时 可见 V <0 时 不可见
<= <=
.
、空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有相互遮挡的重叠部分? 对于根本不存在相互遮挡关系的物体,应 避免这种不必要的测试。
9
象空间消隐算法:
这类算法对屏幕上的每个象素进行判断,以决
定物体上哪个多边形在该象素 点上是可见的。若屏
幕上有m×n个象素点,每个物体表面上有h个多边形
,则该类消隐算法计算量正比于mnh。
则: k个物体的算法复杂度为: O(mnkh) 。
10
算法排序
各种消隐算法均采用一定形式的几何排序。通过排
序,可搜查出位置上靠近观察者的几何元素,确定几何
2
0
4
Z
1
X
0 1 2 3 4 5
0 5 10 15 20 25
4 9 14 19 24 29
A
B
A’
B’
背面剔除
剔除依据: 物体表面是封闭的,背面总是被前 向面所遮挡,从而始终是 不可见的。
外法向 外法向与投影方向(观察方向)的夹角判断: 前向面与后向面(背面)
法向向量N
<90°
可见
cos N V
视线向量V
>90°
法向向量N
<90°
不可见
法向向量N
可见
视线-法线夹角法
• 凸多面体消隐的基本原理
– 表面外法线与其可见性的关系 设平面Pi上任一点的外法矢ni与该点的视线矢量vi的数 量积:
从而有
ni vi cos i ni vi
其中θi为ni与vi之间的夹角,i=1,2,…,m,这里m为平面数。
• 当 cosθi≥0 ,即 0≤θi ≤π/2 时,Pi为朝前面,为可见的,应 该画出; • 当 cosθi<0 ,即 π/2 <θi ≤π时,Pi为朝后面,不可见,不 画出或用虚线表示。 视线方向与外法线的关系如图7-7。
早期图形显示器是用线条表示图形,消隐主要是消隐线 问题。使用光栅显示器后,物体可用连续变化的色调来描 述,消隐算法的研究渐渐转向消隐面的问题。
隐藏线(面)的消除的两种基本算法
第一种是物空间算法。 • 它以三维场景中的物体对像作为处理单元的,在所 有的对像之间进行比较,除去完全不可见的的物体 和物体上不可见的部分。常用于线框表示立体的线 隐藏,也用于面隐藏。 特点是:算法可以达到相当高的精度。 for (场景中的每一个物体) { 将其与场景中的其它物体比较,确定其 表面的可见部分;显示该物体表面的可见部分; }
for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表 面的颜色来显示像素}
算法复杂度
假设场景中有k个物体,平均每个物体表面 由h个多边形构成,显示区域中有m x n个像素,
则:
第一种算法的复杂度为: O((kh)×(kh))
第二种算法的复杂度为:O(mnkh)
物空间消隐算法: 需对物体表面的h个多边形中的每个面与其余h1个面进行比较,精确地求出物体上每个棱边或每 个面的遮挡关系。算法的计算量正比于h2,即算法 复杂度为:O((h)2) 。 则:k个物体的算法复杂度为:O((kh)2) 。
( x0 , y0 , z 0 ) 为平
面上任意一点。
• 算法实现的一般步骤 根据表面的数据结构,取顶点数据,计算表 面的外法线矢量。 计算外法线在投影方向上的分量的值。 根据分量的值判断表面的可见性。 若表面可见画出该表面,否则处理下一个表 面。
计算平面法向量
已知平面上三个点的坐标为(x1,y1,z1) 、(x2,y2,z2) 、 (x3,y3,z3),其顺序符合右手规则,其大姆指所指方向为该 平面的法向量(a,b,c),则:
第二种是像空间算法。 它以构成图形的每一个像素为处理单元的,确定场景 中哪些表面的像素相对于观察点而言是可见的,用该表面 的颜色填充该像素。常用于隐藏面。
• 特点是:算法精度低,只能达到屏幕精度为止,但速度往 往更高。 其算法是对每一个像素: 在和投影点到像素的连线相交的表面中找到离观察点最近 的表面 用该表面上交点处的颜色填充该像素。
物体表面外法矢量
• 在图中,平面P1P2P3的外法矢量
n1 p1p2 p2 p3 • · • 任意多边形法矢量的算法方法如下: • 设法矢量 ,三个方向分量为:
A B C
(y
i 1 m
m
i
y j )( z i z j ) z j )( xi x j ) x j )( yi y j )
物体分层表示
表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,降低算法复杂度 。 方法: 将父节点所代表的物体看成子节点物体的 包围盒,当两个父节点之间不存在遮挡关系时, 就勿对两者的子节点做进一步测试。 父节点之间的遮挡关系可以用它们之间的包 围盒进行预测试。
将透视投影转换成平行投影
包围盒技术
一个形体的包围盒指的是包围它的简单形体。 比如,2D的矩形,3D的立方块、长方体、球等。 目的: 避免盲目的求交测试; 各物体间的比较等。
一个好的包围盒要具有两个条件: 包围和充分紧密包围着形体; 对其的测试比较简单。 例:矩形包围盒及长方体包围 盒提高算法效率
• 包围盒不相交,线段和多边形也不相交,线段完全可见, 无需就线段和多边形的遮挡关系进行进一步判断。可推广 到面与面的遮挡快速判断。 • 例如:两个空间多边形A、B在投影平面上的投影分别为 A’,B’ ,因为A’ 、B’的矩形包围盒不相交,则A’ 、B’不相交,无须进行遮挡测试。右图:包围盒相交, 投影也相交;包围盒相交,投影不相交。
不可见 可见 不可见 可见 可见 不可见
实体模型数据结构之一
面表 Y 3 7 6
0 1 2 3 4 5 6 7 8 9 ..
线表
0 1 2 3 0 7 6 5 4 7 ... x 0 1 2 3 4 5 6 7 0 100 100 0 0 100 100 0
顶点表
y 0 0 200 200 0 0 200 200 z 0 0 0 0 300 300 300 300
• 当视线矢量平行Z轴时,有
C C cos n A2 B 2 C 2
• 同理,若视线矢量平行X轴时,某平面的可见 性由该平面外法矢量n在X轴的方向分量A所决 定。 • 若视线矢量平行y轴时,某平面的可见性由该 平面外法矢量n在Y轴的方向分量B所决定。
• 平面多边形的外法矢量的计算 为了判别物体上各表面是朝前面还 是朝后面,需求出各表面(平面多边形) 指向物体外侧的法矢量。如图所示 。
面的连贯性 区域连贯性 扫描线的连贯性 深度连贯性 例如:
时才发生变换;
Hale Waihona Puke 棱边的连贯性是指:棱边的可见性在它与其他棱边相交
况下整个面都是可见的。
面的连贯性是指:如果面的一部分是可见的,则一般情