1. 程式人生 > >CG-光柵圖形學裁剪算法-學習筆記

CG-光柵圖形學裁剪算法-學習筆記

復雜 顯示 圖形 因此 延長 比較 信息 spa 矩形區域

一、引入

1. 為什麽要裁剪?——使用計算機處理圖形信息時,計算機內部存儲的圖形往往比較大,而屏幕顯示的知識圖形的一部分。因此需要確定圖形哪些部分落在顯示區之內,哪些落在顯示區之外。這個過程就稱為裁剪

2. 點的裁剪——只需判斷點的坐標在不在矩形區域內,但判斷圖形中每個點是否在窗口內,太費時,不可取。

3. 直線段的裁剪——為復雜圖形裁剪的基礎。

要裁剪一條直線段,首先要判斷:

1)它是否完全落在裁剪窗口內?

2)它是否完全在窗口外?

3)如果不滿足以上兩個條件,則計算它與一個或多個裁剪邊界的交點。

常用的裁剪算法有三種:Cohen-Sutherland中點分割法Liang-Barsky

裁剪算法

一、Cohen-Sutherland算法(編碼裁剪算法)

1. 算法原理:

對每條直線分三種情況處理:
1)若點P1和P2完全在裁剪窗口內,“簡取”之。

技術分享圖片

2)若P1(x1,y1)和P2(x2,y2)均在窗口外,且滿足下列四個條件之一,“簡棄”。

x1 < xleft 且 x2 < xleft

x1 > xright 且 x2 > xright

y1 < ybottom 且 y2 < ybottom

y1 > ytop 且 y2 > ytop

技術分享圖片

3)如果直線段既不滿足“簡取”條件,也不滿足“簡棄”條件,需要對直線進行分段,然後判斷是“簡取”還是“簡棄”。

技術分享圖片

2. 編碼

1° 每條線段的端點都賦以四位二進制碼D3D2D1D0,編碼規則如下:

若 x < xleft,則D0 = 1,否則D0 = 0;——對應左邊界

若 x > xright,則D1 = 1,否則D1 = 0;——對應右邊界

若 y < ybottom,則D2 = 1,否則D2 = 0;——對應下邊界

若 y > ytop,則D3 = 1,否則D3 = 0;——對應上邊界

窗口及其延長線所構成了9個區域。根據該編碼規則:

技術分享圖片

2° 裁剪一條線段時,先求出端點p1和p2的編碼code1和code2,然後進行二進制“”運算和“”運算

1)若code1丨code2 = 0,對直線段應簡取;

2)若code1 & code2 ≠ 0,對直線應簡棄;

技術分享圖片

3)若上述兩條件均不成立,則需求出直線段與窗口邊界的交點,在交點處把線段一分為二;

技術分享圖片

下面根據該算法步驟裁剪如圖所示的直線段P1P2,按照左右上下的順序求出直線段與窗口左邊界的交點為P3,P1P3必在窗口外,可簡棄。對P2P3重復上述處理。

技術分享圖片技術分享圖片

剩下的直線段P3P4再進一步判斷,code1 丨code2 = 0,全在窗口中,簡取。

3. 算法評價:比較適合兩種情況,一是大部分線段完全可見;二是大部分線段完全不可見。

CG-光柵圖形學裁剪算法-學習筆記