第7章隐藏线和隐藏面的消除
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设边L的顶点是vi和vj,对边vivj和每一个可能遮挡它的 多边形E,都要作下列计算和判断,以确定其隐藏关系
• 如果vi和vj都在多边形E所在平面靠近观察者的一侧, 则E不能遮挡直线段vivj • 如果vi和vj不都在多边形E所在平面靠 近观察者的一侧,且vivj和E在Oxy平面
的投影相交,求出其交点。只保留在vi vj 上的对应点在多边形E后边的交点。 •若无交点,这时要判断vi或vj在Oxy平
设点 v j 的坐标为 ( x j , y j , z j ) ,若z( x j , y j ) z j ,则 v j 在多边形所在平面的前面,否则认为v j 在多边 形所在平面的后面。
(2)确定L与遮挡多边形的交点同遮挡多边形的前后 位置关系:
•为了判断边vivj和多边形在oxy平面的投影之间是否有交点, 可首先计算求边vivj和多边形的边界在oxy平面上投影的交点, 我们可以把vivj的投影线段用参数方程表示:
棱间交点只有五个
隐藏线消除(物体用线框图表示)实际计算过程 :
• 要对物体一个一个来考虑,如考虑体A的显示时, step1 确定可能遮挡体A的那些体集合B (包括体A本身)。 Step2 对体A的每个多边形G,要从B中找出可能遮挡它的所 有多边形的集合C。 Step3 对多边形G的每一条边L,从集合C中找出可能遮挡它 的所有多边形E。 Step4 求L和多边形E中的边的交点,确定L的可见部分。 对Step1-3可采用边界盒方法进行处理。下面讨论对Step4 的处理技术。
确定Qi在多边形内或外
(5)确定L的可见部分
不可见阶ivord
–它是一个数字,是某个确定的点的属性 –代表了边上从该点到下一个交点的部分被几个多边形 遮挡。
这里要分两步来做(P140-141):
Step1.确定边QiQj顶点处的不可见阶 Step2.确定边QiQj与遮挡多边形交点处的不可见阶。
• 首先对直线段QiQj与所有多边形交点按参 数S由小到大排序 • 确定起点Qi处的不可见阶,就是遮挡他的 多边形的个数,即S0处的不可见阶 • Si处的不可见阶是:当其为进点时,为Si-1 处的加1;为出点时,Si-1 处的减1 • L的可见部分为SiSi+1 ,其中Si的不可见阶 为0时
7.3 区域子分算法
•区域子分算法(warnock)是一种 所谓分而治之的算法。整个屏幕称 为窗口,分而治之算法是一个递推 的四等分过程,每一次把矩形的窗 口等分成四个相等的小矩形,分成 的矩形也称为窗口。 •每一次子分,均要把要显示的多 边形和窗口的关系作一判断。
子分的过程
这种关系可有以下四种,即
•只有当0≤l≤1和0≤t ≤1时线段和线段vivj在oxy平面上 的投影才有交点 •为了判断vIvj上对应交点的点是在多边形所在平面的前面 ~ ~ z ( 1 t ) z s 1t , 还是后面,则要去比较 zi (1 l ) z j l 和 s 若前者大于后者,则vivj上交点的对应点在多边形所在 平面的前面,否则在后面。
判定场景中的所有可见表面;
用可见表面的颜色填充相应的像素 以构成图形;
本章所讨论的消隐算法的前提假定:
假定1:垂直投影
•下面讨论消隐算法时,都假定投影平面是 oxy平面,投影方向为负z轴方向的垂直投 影。 •如果不是这种情况,可对消隐的对象先作 变换,变成这种情况,然后再作消隐计算。
假定2:
QiQj进入或走出多边形
(4)确定Qi起点和多边形的关系 判断Qi点在多边形内或外
可以从Qi点出发沿x轴的正向作一射线,如图。 若该射线和多边形边界的交点个 数是奇数,则Qi在多边形内,否 则就在多边形外。
但正确地找到交点的个 数并不 容易。如图点Q6处,由于舍入误 差,计算时可能认为Q5Q6,Q6Q7 和QiF均有交点,也可能算出一 个交点或没有求出交点,不同 的交点数可得到完全不同的结 果。----需要特殊处理
(3)确定交点和多边形的关系:是进点还是出点P140
~ ~ ~ 由式(7.9)可知 R (Qs Qs1 Qi Q j ) z ,
其中()z是指向量在z轴上的投影。
~ 当 R <0时,QiQj由多边形外进
入多边形内(该交点称为进点)
~ R 当 >0时,QiQj由多边形内离
开多边形到多边形外(该交点称 为出点)。 这个信息也要和交点的信息 一起保存起来。
顶点的排列次序,使观察者在多 面体外沿着 V1 V2 VL 走时, 多边形的内部始终在他的右侧。
背面剔除
法向向量N
<90°
cos N V
可见
>90°
视线向量V
法向向量N
<90°
可见
不可见
法向向量N
非垂直投影转换成垂直投影
物体之间的遮挡关系与投影中心和投影方 向有着密切的关系,对物体的可见性判定 也和投影方式有密切的关系。 如果投影为垂直投影,则多边形在oxy平面 上的投影可由忽略了z坐标的顶点得到,从 而可大大减少计算量。
BC,BA,BG,EA为隐藏线
在oxy平面上求很多直线的交点的计算
• 如果消隐对象有N条棱,用两两求交 的方法求所有交点的工作量为O( N 2 ) 。 • 实际上交点个数远小于O( N 2 ) ,如图的 多面体有15条边,棱在oxy平面上的 投影相互间只有5个交点。
• 问题在于如何能预先知道它们是不相 交的,从而把它们排挤在求交计算之 外。(可用7.1中方法求棱边投影的包 围盒,剔除后向面技术)
7.2多面体的隐藏线消除
• 讨论隐藏线消除问题,总假定它们 是用线框方式来表示的。在这种方 式下多面体用棱来表示。
• 如果能把各棱上可见和不可见部分 的分界点找到,消隐问题也就迎刃 而解了。 • 这些分界点都是多面体的各棱在 oxy平面上投影间的交点,如图。
• 这样,问题就转化成了在oxy平面 上求很多直线的交点的计算。
•多边形包围了窗口 •多边形和窗口相交 •窗口包围了多边形 •窗口和多边形分离
窗口
在窗口和每个多边形的关系确定之后,有些窗口内的图 形便可显示了。它们属于下列四种情况之一。 所有多边形都和窗口分离 这时只要把窗口内所有的象素填上背景颜色。 只有一个多边形和窗口相交,或这个多边形包含在窗口内。 这时先对窗口内每一象素填上背景颜色,再对窗口内多边形 部分用扫描线算法填色 只有一个包围窗口的多边形 窗口用包围多边形的颜色填充。 如果有多个多边形和窗口的关系分别是相交、内含或包 围,但是有一个包围窗口的多边形在其它多边形前面 整个窗口用该包围多边形的颜色填充。
用边界盒排除不相交的线段求交 把后向面全部去掉
非垂直投影转换成垂直投影
用边界盒排除不相交的线段求交
边界盒:
一个物体的边界盒是指能够包含该物体的 一个几何形状,该形状有较简单的边界。
边界盒的形状可以是长方形(体)状或是圆(球) 形状的。
边界盒可用于投影边界盒,可用于物体本身边界盒, 还可用于某一维方向上的边界盒。
消隐的几个效果图
线框架结构模型 它是将立体对象用轮廓线和小的元素面描述的模型,这 种模型的对象立体数据输入方式简单,容易操作,可以实现 描述的快速性,经常被人们使用。 但是由于线框表示会出现错误理解。如下图所示。
隐藏线消除或隐藏面消除:
用计算机生成三维图形,首先要确定三维场景中的 物体哪些部分是可见的,即确定哪些线或面是可见 的,生成三维图形时只绘制可见的部分。 场景中可见部分的判断过程称为可见线或面的判定, 也称为隐藏线或面的消除。 三维场景中物体的可见性对透视投影是相对于投影 中心;对平行投影则是相对于投影方向。
i j s s 1
可得
~ l ( ~ xs xi )(~ ys ~ ys 1 ) ( ~ ys yi )(~ xs ~ xs 1 ) R ~ t (~ y y )(x x ) ( ~ x x )( y y ) R
s
i
j
i
s
i
j
i
~ R (~ ys ~ y s 1 )(x j xi ) ( ~ xs ~ xs 1 )( y j yi )
x xi (1 l ) x j l y y i (1 l ) y j l
• 多边形上任一边的投影用用参数方程表示:
x~ x s (1 t ) ~ x s 1t y ~ y (1 t ) ~ y t
s s 1
•求交点时解方程:
xi (1 l ) x j l ~ xs (1 t ) ~ xs1t y (1 l ) y l ~ y (1 t ) ~ y t
边的边界盒
多边形的边界盒
Q1Q2的边界盒 Q5Q6的边界盒
去掉后向面
• 把内法线方向背 向视点的面称为 前向面 • 内法线方向指向 视点的面(即外 法线方向背离视 点)称为后向面 • 多面体面的顶点 排序
IJFGH,FABG,HCDI,IDEJ所在的面为前向面 JEAF,DEABC,HGBC所在的面为后向面
• 本章说明的各种消隐方法都假定构成对象的不 同面不能相互贯穿,如图 •也不能有循环遮挡的情况,如果有这种情况, 可把它们剖分成互不贯串和不循环遮挡的情况。
–例如用图中的虚线便可把原来循环遮挡的三个平 面,分割成不互相循环遮挡的四个面。
贯穿和循环遮挡
7.1可见面判断的有效技术
减少求交计算的常用技术:
隐藏面和隐藏线的消除有两种基本的算法
基于图像空间的方法
以构成图像的每一个像素为处理单元 侧重于向屏幕投影后形成的图像 算法简单描述为: 对于图像空间中的每一个像素:
在和投影点到像素连线相交的表面中, 找到离观察点最近的表面; 用该表面上交点处的颜色填充该像素;
基于物体空间的方法
是以三维场景中的物体对象为处理单元 侧重于景中各物体之间的几何关系 对于三维场景中的每一个物体:
面上的投影是否在E的投影的内部, 若是,则vivj就会整个被E所遮挡。
确定L的可见部分的具体计算过程 :
(1)确定L顶点处与遮挡多边形的前后位置关系
~ ~ ~ v 设多边形的顶点为v1 , v2 ,…, L 其坐标为 ( xi , yi , zi ) i=1,2,…,L。 ~ ,v ~ , ~ , v 任取三个不在一直线上的顶点,设为v 4 5 3 记向量 (a, b, c) (v3v4 v3v5 ) ,则多边形E所在的平 面方程为 z( x, y) z3 [a( x x3 ) b( y y3 )]/ c
包围物体投影的边界盒不相交的情况
图7.3 两个物体投影在(x,y)平面,包围投影的边界盒
包围物体投影的边界盒相交的情况
(a) 边界盒和投影均重叠
(b) 边界盒重叠,投影不重叠
一个好的包围盒要具有两个条件: • 包围和充分紧密 包围着形体;
• 对其的测试比较简单。
边界盒可用于包围物体本身而不只是他们的投影, 在此情况下,边界盒是三维的。 边界盒也可用于在某一维方向上进行包围,以判断 两个物体在该方向上是否相交。 zmin2 2 o x
3
1 L 1 sp (v1v k ) (v1v k 1 ) 2 K 2 2
V2 VL
1 L 1 ((x k x1 )( y k 1 y1 ) ( x k 1 x1 )( y k y1 )) 2 K 2
V1
• 如果 SP 0 ,说明其外法线方向与z轴正向的夹角 >90,则F所在的面为后向面。 • 如果 SP 0,说明其外法线方向与z轴正向的夹角 <90,则F所在的面为前向面。
判断后向面的方法P :
137
• 设 多 边 形 F 的 顶 点 为 V1 ,V2 ,,VL , 顶 点Vi 的 坐 标 为 ( xi , yi , zi )。(次序如图所示)
• 如果是一凸多边形,可只取一个三角形计算有向面积 • 凹多边形的内法线方向,可以计算多边形在 oxy 平面上投 V 影的有向面积。有向面积sp可如下计算
zmax2 zmin1
1
zmax1 z
zmax 2 zmin1或zmax1 zmin 2
生成边界盒的一个较简单的方法(P136):
判断两条直线是否相交 多边形的判定
max
xmin min( x1 , x2 ) xmax max( x1 , x2 ) ymin min( y1 ,ห้องสมุดไป่ตู้y2 ) ymax max( y1 , y2 )