圖形學筆記(三)——填充圖元

掃描填充圖元生成

基本過程

遍歷所有的掃描線:

  • 求交點,按照順時針(逆時針)確定和多邊形邊的交點位置
  • 按橫座標排序
  • 配對儲存
  • 對交點座標取整並填充每對交點之間的像素點。

需要考慮兩種特殊情況,即當有邊端點通過掃描線時:

  • 如果共享頂點的兩條邊在掃面線同側,則將其視爲兩個頂點。
  • 否則,將下方端點下移一個像素/上方頂點上移一個像素

加速計算

爲了加速計算引入有序邊表和活化邊表兩個概念。

  • 有序邊表(ET):爲每條掃描線建立一個桶,將下端點在其上的邊歸入對應桶中,同一桶中按照橫座標排序。
  • 活化邊表(AET):即和當前掃描線相交的邊的交點鏈表,通過如下過程計算:
    • 將當前掃描線以下的有序邊表合併後插入活化邊表。(下端點在掃描線下)
    • 刪除其中ymax<yky_{max}<y_k的邊。(過濾上端點在掃面線下的邊)
    • 根據直線斜率計算交點。

區域填充圖元生成

區域的表示

  • 內點法:枚舉出給定區域內所有像素。
  • 邊界表示:枚舉出給定區域所有邊界上像素。

連通性

常用連通性:

  • 4連通:上下左右互相可達。(d{1}d\in \{1\})
  • 8連通:以當前像素爲中心的九宮格中其餘八可達。(d{1,2}d\in \{1,\sqrt{2}\})
  • 16連通:在8聯通基礎上增加8個馬步距離可達,即1*2方格對角線。(d{1,2,5}d\in \{1,\sqrt{2},\sqrt{5}\})

連通性的性質:

  • 當前點和在連通鄰域中的點屬於同一區域
  • 像素4連通的區域的邊界像素只需是8連通
  • 像素8連通的區域的邊界像素必須是4連通,否則欠約束。
    • 如下圖,如果中間區域爲8連通區域,則黃色點和青色點爲同一區域,紅色邊界失效。

在這裏插入圖片描述

內外部判定

奇偶規則:

從任何位置p到區域範圍以外遠距離畫一射線,並統計沿該射線與區域多邊形邊界的交點數目。

  • 若該射線與區域多邊形邊界的交點數目爲奇數,則p是內部點
非零環繞數規則

將環繞數初始化爲零,再假想從待檢測點位置P畫一射線,P點沿射線方向移動時,計數每個方向上穿越射線的邊數(可通過方向向量乘法判斷)。

  • 當多邊形邊從右到左穿越射線時,環繞數加1
  • 當多邊形邊從左到右穿越射線時,環繞數減1
  • 如果最終環繞數非零則爲區域內部點

填充算法

一般區域填充算法都是指定種子點後填充該種子點所在的區域。

  • 遞歸填充:按照連通性,從種子點開始遞歸填充直到填滿。
  • 掃描線填充:爲了減少棧深度,每次填充該點所在的掃描線,並將相鄰掃描線段起始像素座標入棧。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章