计算机图形学讲义2裁减.docx
- 文档编号:30137896
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:21
- 大小:215.42KB
计算机图形学讲义2裁减.docx
《计算机图形学讲义2裁减.docx》由会员分享,可在线阅读,更多相关《计算机图形学讲义2裁减.docx(21页珍藏版)》请在冰豆网上搜索。
计算机图形学讲义2裁减
中点分割裁剪算法
1、基本思想:
从P0点出发找出离P0最近的可见点,和从P1点出发找出离P1最近的可见点。
这两个可见点的连线就是原线段的可见部分。
(见上图)
与Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况,对前两种情况,进行一样的处理;对于第三种情况,用中点分割的方法求出线段与窗口的交点。
A、B分别为距P0、P1最近的可见点,Pm为P0P1中点。
2、中点分割算法-求线段与窗口的交点
1)、从P0出发找距离P0最近可见点采用中点分割方法
先求出P0P1的中点Pm,
若P0Pm不是显然不可见的,并且P0P1在窗口中有可见部分,则距P0最近的可见点一定落在P0Pm上,所以用P0Pm代替P0P1;
否则取PmP1代替P0P1。
再对新的P0P1求中点Pm。
重复上述过程,直到PmP1长度小于给定的控制常数为止,此时Pm收敛于交点。
2)、从P1出发找距离P1最近可见点采用上面类似方法。
3、
s对分辩率为2N*2N的显示器,上述二分过程至多进行N次。
主要过程只用到加法和除法运算,适合硬件实现,它可以用左右移位来代替乘除法,这样就大大加快了速度。
对分辩率为2N*2N的显示器,上述二分过程至多进行N次。
主要过程只用到加法和除法运算,适合硬件实现,它可以用左右移位来代替乘除法,这样就大大加快了速度。
梁友栋-Barsky算法
设要裁剪的线段是P0P1。
P0P1和窗口边界交于A,B,C,D四点,见图。
算法的基本思想是从A,B和P0三点中找出最靠近的P1点,图中要找的点是P0。
从C,D和P1中找出最靠近P0的点。
图中要找的点是C点。
那么P0C就是P0P1线段上的可见部分。
线段的参数表示
x=x0+t△x
y=y0+t△y0<=t<=1
△x=x1-x0△y=y1-y0
窗口边界的四条边分为两类:
始边和终边。
⏹求出P0P1与两条始边的交点参数t0,t1,令tl=max(t0,t1,0),则tL即为三者中离p1最近的
点的参数
⏹求出p0p1与两条终边的交点参数t2,t3,令tu=min(t2,t3,1),则tU即为三者中离p0最近的
点的参数
⏹若tu>tl,则可见线段区间
[tl,tu]
始边和终边的确定及交点计算:
令QL=-△xDL=x0-xL
QR=△xDR=xR-x0
QB=-△yDB=y0-yB
QT=△yDT=yT-y0
交点为ti=Di/Qii=L,R,B,T
Qi<0ti为与始边交点参数
Qi>0ti为与终边交点参数
Qi=0Di<0时,线段不可见
Di>0时,分析另一D,
当Qi=0时
若Di<0时,线段不可见
(如图中AB,有QR=0,DR<0)
若Di>0时,分析另一D,
(如图中的EF就是这种情况,它使QL=0,DL>0和QR=0,DR>0。
这时由于EF和x=xL及x=xR平行,故不必去求出EF和x=xL及x=xR的交点,而让EF和y=yT及y=yB的交点决定直线段上的可见部分。
)
参数化算法(Cyrus-Beck)
考虑凸多边形区域R和直线段P1P2
P(t)=(P2-P1)*t+P1
设A是区域R的边界上
一点,N是区域边界在
A点的内法线向量
则对于线段P1P2上任一点P(t)
N·(P(t)-A)<0->外侧
N·(P(t)-A)>0->内侧
N·(P(t)-A)=0->边界
或其延长线上
凸多边形的性质:
点P(t)在凸多边形内的充要条件是,对于凸多边形边界上任意一点A和该点处内法向N,都有
N·(P(t)-A)>0
k条边的多边形,可见线段参数区间的解:
Ni·(p(t)-Ai)>=0,i=0,…,k,0≤t≤1.
即:
Ni·(P1-Ai)+Ni·(P2-P1)t>=0
(1)式
可得:
令ti=Ni·(P1-Ai)/[Ni·(P2-P1)]
Ni·(P2-P1)=0->平行于对应边。
此时判断Ni·(P1-Ai)
若Ni·(P1-Ai)<0->P1P2在多边形外侧->不可见,
若Ni·(P1-Ai)>0->P1P2在多边形内侧->继续其它边的判断
对于t值的选择:
首先,要符合0≤t≤1;其次,对于凸窗口来说,每一个线段与其至多有两个交点,即有两个相应的t值。
所以我们可以把计算出的t值分成两组:
一组为下限组,是分布在线段起点一侧的;一组为上限组,是分布在线段终点一侧的。
这样,只要找出下限组中的最大值及上限组中的最小值,就可确定线段了。
分组的依据是:
如果Ni·(P2-P1)<0,则计算出的值属于上限组
如果Ni·(P2-P1)>0,则计算出的值属于下限组
因此,线段可见的交点参数:
tl=max{0,max{ti:
Ni·(P2-P1)>0}}
tu=min{1,min{ti:
Ni·(P2-P1)<0}}
若tl<=tu,[tl,tu]是可见线段的交点参数区间,否则,线段不可见。
当凸多边形是矩形窗口且矩形的边与坐标轴平行时,该算法退化为Liang-Barsky算法。
Cyrus-Beck扩充到凸多边形
思考:
凹多边形窗口的线段裁剪
圆和曲线窗口的线段裁剪
多边形裁剪
错觉:
直线段裁剪的组合?
新的问题:
1)边界不再封闭,需要用窗口边界的恰当部分来封闭它,如何确定其边界?
Sutherland-Hodgman算法
分割处理策略:
将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。
流水线过程(左上右下):
前边的结果是后边的输入。
亦称逐边裁剪算法
基本思想是一次用窗口的一条边裁剪多边形。
考虑窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:
可见一侧;不可见一侧
多边形的各条边的两端点S、P。
它们与裁剪线的位置关系只有四种
情况
(1)仅输出顶点P;
情况
(2)输出0个顶点;
情况(3)输出线段SP与裁剪线的交点I;
情况(4)输出线段SP与裁剪线的交点I和终点P
⏹上述算法仅用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入。
⏹对于每一条裁剪边,算法框图同上,只是判断点在窗口哪一侧以及求线段SP与裁剪边的交点算法应随之改变。
对凸多边形应用本算法可以得到正确的结果,但是对凹多边形的裁剪将如图所示显示出一条多余的直线。
这种情况在裁剪后的多边形有两个或者多个分离部分的时候出现。
因为只有一个输出顶点表,所以表中最后一个顶点总是连着第一个顶点。
解决这个问题有多种方法,一是把凹多边形分割成若干个凸多边形,然后分别处理各个凸多边形。
二是修改本算法,沿着任何一个裁剪窗口边检查顶点表,正确的连接顶点对。
再有就是Weiler-Atherton算法。
反走样
用离散量表示连续量引起的失真现象称之为走样(aliasing)。
光栅图形的走样现象
⏹阶梯状边界;
⏹图形细节失真;
⏹狭小图形遗失:
动画序列中时隐时现,产生闪烁。
走样现象举例
不光滑(阶梯状)的图形边界
例子:
PaintBrush
图形细节失真
狭小图形的遗失与动态图形的闪烁
用于减少或消除走样现象的技术称为反走样(antialiasing)
提高分辨率
简单区域取样
加权区域取样
把显示器分辨率提高一倍,
直线经过两倍的象素,锯齿也增加一倍,
但同时每个阶梯的宽度也减小了一倍,
所以显示出的直线段看起来就平直光滑了一些。
方法简单,但代价非常大。
显示器的水平、竖直分辩率各提高一倍,则显示器的点距减少一倍,帧缓存容量则增加到原来的4倍,而扫描转换同样大小的图元却要花4倍时间。
而且它也只能减轻而不能消除锯齿问题
另一种方法(软件方法):
用较高的分辨率的显示模式下计算,(对各自像属下计算,再求(非)加权平均的颜色值),在较低的分辨率模式下显示。
只能减轻而不能消除锯齿问题。
把每个像素分为四个子像素,扫描转换算法求得各子像素的灰度值,然后对四像素的灰度值简单平均,作为该像素的灰度值。
设分辨率为mn,把显示窗口分为(2m+1)(2n+1)个子像素,对每个子像素进行灰度值计算,然后根据权值表所规定的权值,对位于像素中心及四周的九个子像素加权平均,作为显示像素的颜色。
设m=4,n=3
简单区域取样
方法由来
⏹两点假设
1、象素是数学上抽象的点,它的面积为0,它的亮度由覆盖该点的图形的亮度所决定;
2、直线段是数学上抽象直线段,它的宽度为0。
⏹现实
♦像素的面积不为0;
♦直线段的宽度至少为1个像素;
⏹假设与现实的矛盾是导致混淆出现的原因之一
⏹解决方法:
改变直线段模型,由此产生算法
⏹方法步骤:
1、将直线段看作具有一定宽度的狭长矩形;
2、当直线段与某象素有交时,求出两者相交区域的面积;
3、根据相交区域的面积,确定该象素的亮度值
基本思想:
⏹每个象素是一个具有一定面积的小区域,将直线段看作具有一定宽度的狭长矩形。
当直线段与象素有交时,求出两者相交区域的面积,然后根据相交区域面积的大小确定该象素的亮度值。
有宽度的线条轮廓象素相交的五种情况及用于计算面积的量
面积计算
⏹情况⑴(5)阴影面积为:
D2/2m;
⏹情况⑵(4)阴影面积为:
D-m/2;
⏹情况⑶阴影面积为:
1-D2/m
为了简化计算可以采用离散的方法
⏹求相交区域的近似面积的离散计算方法
1、将屏幕象素分割成n个更小的子象素;
2、计算中心点落在直线段内的子象素的个数,记为k,
3、k/n为线段与象素相交区域面积的近似值
简单区域取样采用的是一个盒式滤波器,它是一个二维加权函数,以w表示。
w=1若在当前像素所代表的正方形上
w=0其它区域上
直线条经过该像素时,该像素的灰度值可以通过在像素与直线条的相交区域上对w求积分获得。
此时,面积值=体积值
–缺点:
–象素的亮度与相交区域的面积成正比,而与相交区域落在象素内的位置无关,这仍然会导致锯齿效应。
–直线条上沿理想直线方向的相邻两个象素有时会有较大的灰度差。
–采用圆锥形滤波器,圆锥的底圆中心在当前像素,底圆半径为一个像素,锥高为1。
当直线条经过该像素时,该像素的灰度值是在二者相交区域上对滤波器进行积分的积分值。
–见p213的图4.7.9
–特点:
–接近理想直线的像素将被分配更多的灰度值。
–相邻的两个像素的滤波器相交,有利于缩小直线条上相邻像素的灰度差。
–具体算法见p213
–简单区域取样和加权区域取样技术的前提是多级灰度,利用多级灰度来提高视觉分辨率。
但是,若只有两级灰度呢?
能否使用上述技术呢?
–对于给定的分辨率,通过将几个像素组合成一个单元来获得多级灰度。
–例:
在一个显示器中将四个像素组成一个单元,可产生5种光强。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 讲义 裁减
![提示](https://static.bdocx.com/images/bang_tan.gif)