
計算機圖形學 - 觀察與裁剪
裁剪在計算機圖形學中的主要用途是去除視區之外的物件、線條或線段。觀察變換對點相對於觀察體積的位置不敏感——尤其是那些在觀察者後面的點——因此在生成檢視之前必須去除這些點。
點裁剪
從給定視窗裁剪點非常容易。考慮下圖,其中矩形表示視窗。點裁剪告訴我們給定點 (X, Y) 是否在給定視窗內;並決定我們是否將使用視窗的最小和最大座標。
如果 X 位於 Wx1 ≤ X ≤ Wx2 之間,則給定點的 X 座標在視窗內。同理,如果 Y 位於 Wy1 ≤ Y ≤ Wy2 之間,則給定點的 Y 座標在視窗內。

線裁剪
線裁剪的概念與點裁剪相同。線上裁剪中,我們將剪掉視窗外部的線段,只保留視窗內部的線段。
Cohen-Sutherland 線裁剪
此演算法使用下圖所示的裁剪視窗。裁剪區域的最小座標為 $(XW_{min,} YW_{min})$,裁剪區域的最大座標為 $(XW_{max,} YW_{max})$。

我們將使用 4 位來劃分整個區域。這 4 位分別表示區域的頂部、底部、右側和左側,如下面的圖所示。這裡,頂部和左側位被設定為 1,因為它位於左上角。

對於直線,存在 3 種可能性:
直線可以完全位於視窗內(此直線應被接受)。
直線可以完全位於視窗外(此直線將完全從區域中移除)。
直線可以部分位於視窗內(我們將找到交點,並僅繪製位於區域內的線段)。
演算法
步驟 1 - 為每個端點分配區域程式碼。
步驟 2 - 如果兩個端點的區域程式碼均為0000,則接受此直線。
步驟 3 - 否則,對兩個區域程式碼執行邏輯與運算。
步驟 3.1 - 如果結果不是0000,則拒絕此直線。
步驟 3.2 - 否則,您需要裁剪。
步驟 3.2.1 - 選擇視窗外部的直線端點。
步驟 3.2.2 - 在視窗邊界處找到交點(基於區域程式碼)。
步驟 3.2.3 - 用交點替換端點並更新區域程式碼。
步驟 3.2.4 - 重複步驟 2,直到我們找到一條被平凡接受或平凡拒絕的裁剪直線。
步驟 4 - 對其他直線重複步驟 1。
Cyrus-Beck 線裁剪演算法
此演算法比 Cohen-Sutherland 演算法更有效率。它採用引數線表示和簡單的點積。

直線引數方程為:
P0P1:P(t) = P0 + t(P1 - P0)
設 Ni 為外法線邊 Ei。現在在邊 Ei 上選擇任意點 PEi,則點積 Ni.[P(t) – PEi] 決定點 P(t) 是“在裁剪邊內”還是“在裁剪邊外”或“在裁剪邊上”。
如果 Ni.[P(t) – PEi] < 0,則點 P(t) 在內部
如果 Ni.[P(t) – PEi] > 0,則點 P(t) 在外部
如果 Ni.[P(t) – PEi] = 0(交點),則點 P(t) 在邊上
Ni.[P(t) – PEi] = 0
Ni.[ P0 + t(P1 - P0) – PEi] = 0(用 P0 + t(P1 - P0) 替換 P(t))
Ni.[P0 – PEi] + Ni.t[P1 - P0] = 0
Ni.[P0 – PEi] + Ni∙tD = 0(將 D 替換為 [P1 - P0])
Ni.[P0 – PEi] = - Ni∙tD
t 的方程變為:
$$t = \tfrac{N_{i}.[P_{o} - P_{Ei}]}{{- N_{i}.D}}$$
它對於以下條件有效:
- Ni ≠ 0(錯誤不可能發生)
- D ≠ 0(P1 ≠ P0)
- Ni∙D ≠ 0(P0P1 不平行於 Ei)
多邊形裁剪(Sutherland Hodgman 演算法)
也可以透過指定裁剪視窗來裁剪多邊形。Sutherland Hodgeman 多邊形裁剪演算法用於多邊形裁剪。在此演算法中,多邊形的所有頂點都針對裁剪視窗的每條邊進行裁剪。
首先,多邊形針對多邊形視窗的左邊緣進行裁剪,以獲得多邊形的新頂點。這些新頂點用於針對裁剪視窗的右邊緣、上邊緣、下邊緣裁剪多邊形,如下面的圖所示。

在處理多邊形與裁剪視窗的邊緣時,如果邊緣不完全位於裁剪視窗內,則會找到一個交點,並且從交點到外部邊緣的部分邊緣會被裁剪。下圖顯示了左、右、上和下邊緣裁剪:

文字裁剪
在計算機圖形學中,使用各種技術來提供文字裁剪。它取決於用於生成字元的方法和特定應用程式的要求。文字裁剪有三種方法,如下所示:
- 全部或無字串裁剪
- 全部或無字元裁剪
- 文字裁剪
下圖顯示了全部或無字串裁剪:

在全部或無字串裁剪方法中,我們根據裁剪視窗保留整個字串或拒絕整個字串。如上圖所示,STRING2 完全位於裁剪視窗內,因此我們保留它;STRING1 僅部分位於視窗內,因此我們拒絕它。
下圖顯示了全部或無字元裁剪:

此裁剪方法基於字元而不是整個字串。在此方法中,如果字串完全位於裁剪視窗內,則我們保留它。如果它部分位於視窗外,則:
您僅拒絕字串的外部部分
如果字元位於裁剪視窗的邊界上,則我們丟棄該整個字元並保留其餘字串。
下圖顯示了文字裁剪:

此裁剪方法基於字元而不是整個字串。在此方法中,如果字串完全位於裁剪視窗內,則我們保留它。如果它部分位於視窗外,則
您僅拒絕字串的外部部分。
如果字元位於裁剪視窗的邊界上,則我們僅丟棄字元的視窗外部部分。
點陣圖圖形
點陣圖是描述影像的畫素集合。它是計算機圖形的一種型別,計算機使用它來儲存和顯示圖片。在這種型別的圖形中,影像逐位儲存,因此被稱為點陣圖圖形。為了更好地理解,讓我們考慮以下示例,其中我們使用點陣圖圖形繪製笑臉。

現在我們將瞭解此笑臉如何在計算機圖形學中逐位儲存。

仔細觀察原始笑臉,我們可以看到有兩條藍線,在上圖中分別表示為 B1、B2 和 E1、E2。
同樣,笑臉分別使用 A4、B5、C6、D6、E5 和 F4 的組合位表示。
點陣圖圖形的主要缺點是:
我們無法調整點陣圖影像的大小。如果您嘗試調整大小,畫素會變得模糊。
彩色點陣圖可能非常大。