高級計算機圖形學筆記

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-03ryXxuU-1576743462382)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191215144426468.png)]

長安大學-柳有權老師講授

3D

Geometry Representation幾何表示

Topological information(拓撲信息)

Geometrical information (幾何信息 )

  • Position位置座標
  • Normal法向

Appearance information(外觀信息)

  • Material and texture (物體表面的材質和紋理)

其他

  • Mass質量
  • Density密度

3D對象表示

~Raw data 、
Point cloud點雲、Range image深度圖像Polygon soup多邊形集合
~Solids
Voxels體素、BSP tree、Cell complex細胞複合體
~Surfaces
Mesh網格、Subdivision細分、Parametric參數、Implicit 隱式
~High-level structures
CSG、Constrained blocks、Generative model、Skeleton、 Sweep、Scene graph
(構造實體幾何、約束塊、生成模型、骨架、掃描、場景圖)

CG中的3D模型

  • Wire frame model(線框模型)

    • 只有頂點和邊,無表面信息
    • 優勢:簡單好畫
      劣勢:很難產生現實的結果,很難避免歧義。
  • Surface model (表面模型)

    • 將物體表示爲一系列面片

    • Polygon surfaces:用一系列多邊形面片來表達物體的表面

    • 多邊形性質

      • 簡單多邊形、凹凸性、有孔多邊形、退化多邊形(Non single +多邊形面退化爲線)
        • GOOD
          同一平面內、單一、簡單、無洞、凸;
          只有一個法向、易於判斷內外、快速三角化、快速填充和繪製
    • 邊界表示法(B-Rep)
      通過描述實體的邊界頂點、邊、面來表示一個實體的方法。

      點至少和三個面(或三條邊)鄰接,不允許存在孤立點
      邊只有兩個鄰面,不允許存在懸邊

    面是形體表面的一部分,不允許存在懸面

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ttcU96Jp-1576743462385)(…/…/md_files/photo_file/1573995322310.png)]

    1. 幾何信息
      頂點、棱邊、表面的大小、尺寸、位置、形狀
    2. 拓撲信息
      點、線、面的連接關係
    • 曲面建模

      • Parametric surfaces (參數化曲面) :Q(u) = (X(u), Y(u), Z(u))
        • Beziér 曲線,由一系列控制點來決定的曲線。16個控制點定義一張Beziér曲面片。
        • 猶他茶壺,改變控制頂點可改變曲面形狀。
      • Implicit surfaces (隱式曲面):f (x, y, z) = 0
        • 元球造型技術
    • 曲面建模和多邊形建模的對比!

      • 多邊形建模:簡單靈活(只有一個法向、易於判斷內外、快速三角化、快速填充和繪製
      • 曲面片建模:參數化曲面保持表面的連續性變形控制方便=改變控制點可修改曲面形狀
  • Solid model (實體模型)

    • 體素構造法 (Constructive Solid Geometry, CSG,構造實體幾何)

      • “實體”(solid) ==三維歐拉空間中的正則三維點集:
        r·X = k·i·X(點集X,正則化算子r,k和i爲點集的閉包和內部)
        iX是X的全體內點組成的集合
    • CSG樹

      葉子結點:基本體素。中間結點: 幾何變換;集合操作。根結點:最終構造的物體。
      優點:形象直觀,易於理解;物理屬性易於計算,如體積、質量
      缺點:不利於用“面片繪製”的方式進行快速繪製;複雜的自然物體很難採用CSG方法來構建。

  • Sweep Representations(推移表示

    • Translational sweep (平移式)
      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mSqxqGtH-1576743462385)(G:\md_files\photo_file\1573998122812.png)]

    • Rotational sweep (旋轉式)
      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MPQbVpP8-1576743462386)(G:\md_files\photo_file\1573998141689.png)]

    • General sweep (廣義式)
      sweep 路徑可以是任意曲 線,截面的形狀和大小可以沿着路徑而發生變 化,最終生成三維物體。

    • 最常見的方法:三角網格法
      圖形的目標是什麼?-給定3D場景和攝像機位置,生成(渲染)2D圖像。
      3D場景的數據結構/表示是什麼?
      用於簡單的圖元,如球體、立方體……在複雜模型中,通常使用三角形網格或參數曲線/曲面

      • 包含一系列的面F和點V:
        e.g.
        f1 --(v1,v2,v3 ), f2 --(v4,v5,v6 ), f3 --(v7,v8,v9 ), …
    • 採用空間劃分的表示方法(Space- partitioning)—八叉樹表示法 (Octrees)

可視化方法

  • 掃描線繪製
    光線跟蹤
    輻射度
    體繪製

第三章 Transformation

  • Geometric transformation in 3D space
  • Projection(投射
  • Clipping(裁剪
  • Transformation from window to viewport(從窗口到視圖的轉換

Geometric Transformation

Translation(平移)
Scaling(放縮)
Rotation(旋轉)
Homogeneous Coordinates(齊次座標)
Global transformation and local Transformation(全局/局部變換

Translation(平移)

​ Point P(x, y, z) translate to P’(x’, y’, z’) by the distance T(Δx, Δy, Δz)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZLkdbNHv-1576743462386)(…/…/md_files/photo_file/image-20191125100829008.png)]

Scaling(放縮)

  1. 原點放縮

    Point P(x, y, z) is scaled to get the point P’(x’, y’, z’)
    x’ = x * Sx,y’ = y * Sy,z’ = z * Sz,最終爲:P’ = P * S

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v4di3e93-1576743462386)(…/…/md_files/photo_file/image-20191125101205108.png)]

  2. 定點放縮

    – Translate (-xp, -yp, -zp) 平移
    – Scaling with (Sx, Sy, Sz) 縮放
    – Translate (xp, yp, zp) 平移

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zppbyDCR-1576743462386)(…/…/md_files/photo_file/image-20191125101636343.png)]

Rotation(旋轉)

點P相對於Z軸旋轉α角度

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cIhJKU6W-1576743462386)(…/…/md_files/photo_file/image-20191125101851946.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wRaFrCH3-1576743462386)(…/…/md_files/photo_file/image-20191125102007409.png)]

​ 相對於哪個軸旋轉,該矩陣的行對應位爲1,該行其餘爲0.

爲什麼要把各種變換表示成矩陣運算的形式?

​ – 因爲可將連續變換組合成一個矩陣運算

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Pik1IYxq-1576743462388)(…/…/md_files/photo_file/image-20191125102347235.png)]

參考博客:https://blog.csdn.net/ningxuanyu5854/article/details/101905295

左乘: 座標系不動,點動,則左乘。
【若繞靜座標系(世界座標系)旋轉,則左乘,也是變換矩陣乘座標矩陣;】
右乘: 點不動,座標系動,則右乘。
【若是繞動座標系旋轉(自身建立一個座標系),則右乘,也就是座標矩陣乘變換矩陣】

全局/局部變換

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CLSz9x1u-1576743462388)(…/…/md_files/photo_file/image-20191125105015278.png)]

  • Global transformation
    – 每一次變換均可以看成是**相對於原始座標系**執行的
    – 後調用的變換矩陣乘在先前矩陣的左邊(後調用的在左邊
    – 先調用的變換矩陣先執行(先調用的先執行
  • Local transformation
    – 每一次變換均可以看成是在**上一次變換所形成的新的座標系**中進行
    – 後調用的變換矩陣乘在先前矩陣的右邊(後調用的在右邊
    – 後調用的變換矩陣先執行(後調用的先執行

局部變換可以通過逆全局變換的相乘順序來實現

先平移10,再旋轉45度。M1是全局變換矩陣,M2是局部變換矩陣。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yRYM7SXD-1576743462388)(…/…/md_files/photo_file/image-20191125105151305.png)]

法向的轉換

曲面法線:局部垂直於曲面的單位向量。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Cjs4Pw7H-1576743462389)(…/…/md_files/photo_file/image-20191125105742333.png)]

法向常常用來製造陰影,使得物體看起來更3D一些。

各種光照模型利用表面法線進行光照計算。

  • 對法向的切平面進行轉換,而不是直接對法向量直接操作。
  • 選擇切平面的任一向量V(os)進行轉換:V(ws) = M · V(os)

切平面的向量V(os)是垂直於法向量的。

第四章 渲染流水線

  • 基本的固定管道

    Model view模型視圖
    Projection 投影
    Rasterization 光柵化
    Framebuffer 幀緩衝區

Projection

Projection:3D --> 2D

(x, y, z) --> (wx, wy)

在投影時,每個像素的深度都要記錄下來。這個深度值在“可見性表面檢測( visible surface detection” )”時很有用。

Perspective projection(透視投影)

投影中心與投影平面之間的距離爲有限

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aRCkXYlK-1576743462389)(…/…/md_files/photo_file/image-20191127192920859.png)]

Parallel projection(平行投影)

投影中心與投影平面之間的距離爲無限

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-m6VG4naS-1576743462389)(…/…/md_files/photo_file/image-20191127192940688.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6R77Fvzl-1576743462389)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202211631676.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iiIN56lW-1576743462389)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202211645899.png)]

Clipping

Point clipping (點的裁減)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4KAqBF7Q-1576743462389)(…/…/md_files/photo_file/image-20191127194643679.png)]

Line clipping (線的裁減)

1.確定直線是完全可見;
2.部分可見;
3.還是完全不可見;

Cohen-Sutherland line clipping algorithm
Mid-point partition algorithm(中點分割算法)

線與裁剪窗口之間的關係:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RPMLdmz9-1576743462390)(…/…/md_files/photo_file/image-20191127194826023.png)]

  1. 完全在內部。
  2. 完全在外部。
  3. 其他。

方法一:

Cohen-Sutherland直線裁剪算法,也叫作編碼算法。
Binary Region Codes:

從左往右:依次爲第1位–第4位。
第1位:1,位於窗口的左邊;0,其它
第2位:1,位於窗口的右邊;0,其它
第3位:1,位於窗口的下方;0,其它
第4位:1,位於窗口的上方;0,其它

img

  • 兩條線段的端點的區域編碼都爲0,則二者“或”運算=0,說明二條線段都在窗口內。簡取之。
  • 若都不爲0(邏輯與操作的結果不是全0),則均在窗口外的同一側,或左方、右方、上方、下方。簡棄之。
  • 若不滿足簡取,也不滿足簡棄,則線段與窗口進行“求交”判斷

方法二:

Mid-point partition algorithm :中點分割裁剪法

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xlzPaBJU-1576743462390)(…/…/md_files/photo_file/image-20191127215042461.png)]

從P0出發找出離P0最近的可見點(A點),和從P1點出發找出離P1最近的可見點(B點)。則AB即爲裁減後的線段。中點分割直線段裁剪算法對Cohen-Sutherland直線裁剪算法的第3種情況做了改進, 用中點分割的方法求出線段與窗口的交點。A、B分別爲距P0 、 P1最近的可見點,Pm爲P0P1中點。

從P0出發找出離P0最近的可見

  1. 先求出P0P1的中點Pm
  2. 若P0Pm不是顯然不可見的,並且P0P1在窗口中有可見部分,則距P0最近的可見點一定落在P0Pm上,所以用P0Pm代替P0P1;
  3. 否則(P0Pm顯然不可見)取PmP1代替P0P1。
  4. 再對新的P0P1求中點Pm。重複上述過程,直到PmP1長度小於給定的控制常數ε爲止,此時Pm收斂於交點。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bKhhPy5c-1576743462391)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202213148296.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kCybwHiw-1576743462391)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202213157584.png)]

ε可取一個像素的寬度。對分辯率爲2N*2N的顯示器,上述二分過程至多進行N+1次。主要過程只用到加法和除法運算,適合硬件實現,它可以用左右移位來代替乘除法,這樣就大大加快了速度。

Polygon clipping (多邊形的裁減)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sSdfV2ro-1576743462391)(…/…/md_files/photo_file/image-20191128163434702.png)]

Sutherland-Hodgman polygon clipping

  1. 一次用窗口的一條邊來裁剪多邊形

  2. 窗口的任意一條邊的所在直線(裁剪線)把窗口所在平面分成兩部分:

    可見一側:包含窗口那部分

    不可見一側:不包含窗口那部分

將每條線段的端點S, P與裁剪線比較之後,可以輸出0~2個點:

(1) S, P都在可見一側,輸出頂點P。

(2) S, P都在不可見一側,輸出0個頂點。

(3) S在可見一側,P在不可見一側,輸出SP與裁剪線的交點I。

(4) S在不可見一側,P在可見一側,輸出SP與裁剪線的交點I和頂點P。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kZ7e42ZS-1576743462391)(…/…/md_files/photo_file/20190602190235493.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-p0creUiE-1576743462391)(…/…/md_files/photo_file/image-20191128164707090.png)]

如右側圖,線段P1P2,保留末端點P2;下面左圖,保留線段和窗口的交點P1’;下面右圖,不保留。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bM7YWMyP-1576743462392)(…/…/md_files/photo_file/image-20191128164737875.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rdToD7QI-1576743462392)(…/…/md_files/photo_file/image-20191128164831861.png)]

2D裁剪算法 擴展 到3D

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LVzmee2X-1576743462393)(…/…/md_files/photo_file/image-20191128170519173.png)]

平行投影中,視角是由x=0,x=1,y=0,y=1,z=0,z=1六個平面組成的截體。
視角投影中,視角是由x=z,x=-z,y=z,y=-z,z=z(min)和z=1六個平面組成的截體。

從Window到Viewport的變換

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oJvuPO1d-1576743462393)(G:%5C1%E7%A0%94%E7%A9%B6%E7%94%9F%E8%AF%BE%E5%A0%82%E6%96%87%E4%BB%B6%5C%E9%AB%98%E7%BA%A7%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6%5Cimage-20191128171948324.png)]

上式中,座標Y的計算存在問題。(yw-WYB) / (WYT - WYB)

X-左邊界 / (X右邊界 - X左邊界)

在歸一化空間(window)中保持與視圖空間(viewing coordinates)中相同的相對比例。

第五章 光柵化過程

多邊形的掃描轉換:主要是通過確定穿越區域的掃描線的覆蓋區間來填充,區域填充是從給定的位置開始塗描直到指定的邊界條件爲止.

區域填充:第一步先確定需要填充哪些象素;第二步確定用什麼顏色值來填充.

掃描線轉換和區域填充

  • 多邊形填充

    頂點邊緣表示(用多邊形的頂點序列來刻畫多邊形)

    —轉換爲—>

    像素集表示(也叫點陣表示,用位於多邊形內的像素集合來刻畫多邊形)

    掃描轉換、區域填充

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BmbfTumQ-1576743462393)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201202616147.png)]

    從點到與多邊形邊相交的點的箭頭;如果掃描線和多邊形圖形的相交點爲奇數,則該點位於多邊形內;如果是偶數,則位於多邊形外。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sFCkeBbz-1576743462393)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201210425960.png)]

多邊形填充的步驟:

(1)求交:計算掃描線與多邊形各邊的交點;
(2)排序:把所有交點按遞增順序進行排列;
(3)交點配對:第一個與第二個,第三個與第四個等等.每對交點就代表掃描線與多邊形的個相交區間;
(4)區間填色:把這些相交區間內的象素置成多邊形顏色,把相交區間外的象素置成背景色.

  • 當掃描線與多邊形頂點相交時,交點的取捨問題:

在第一種情況,共享頂點的兩條邊分別落在掃描線的兩邊。這時,交點只算一個。

在第二種情況,共享交點的兩條邊在掃描線的同一邊,這時交點作爲零個或兩個,取決於該點是多邊形的局部最高點還是局部最低點。

  • 多邊形邊界上象素的取捨問題

規定落在右/上邊界的象素不予填充,而落在左/下邊界的象素予以填充。

按照最大區域的多邊形進行填充。

Scan-line polygon-fill algorithm

  • 充分利用像素的相關特性
  • 三個相關性質
    • Area coherence (區域的連貫性)
    • Scan-line coherence (掃描線的連貫性)
    • Edge coherence (邊的連貫性)

區域一致性

兩條掃描線之間的屏幕區域被多邊形分割爲梯形

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-M6Jw9dlX-1576743462393)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201212605809.png)]

(1)梯形分爲多邊形內梯形和多邊形外梯形。

(2)兩種梯形交錯佈置。

掃描線一致性

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hZ0FDBB8-1576743462394)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201213231604.png)]

n是偶數;掃描線上,只有段(Xei,Xei+1)在多邊形內部,i=1,3,5,7,9

掃描線相干性是區域相干性在掃描線上的反映。

邊的一致性

假設掃描線y=e、y=e-1上的交點序列分別爲上、下。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xHAL6odw-1576743462395)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201214133749.png)]

如果邊PiPj與掃描線y=e和y=e-1相交;對應點Xd和Xe的對應關係有:Xe= Xd十1 / m。

因此,計算y=e與y = e-1的交點:
(1)計算與y=e-1 andy=e相交的邊的交點。
(2)計算只與y=e相交的邊上的點。

邊緣相干是區域相干在邊緣上的反映。

奇點

當掃描線與多邊形P的交點是P的頂點時,則稱該交點爲奇點。

  • 如果[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7RuBcM9V-1576743462395)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201214717931.png)],則該點爲局部極值點;否則,爲非極值點。
  • 規定:奇點是極值點時,該點按兩個交點計算;否則按一個交點計算。
  • 預處理非極值點:邊緣端點的y座標增加1。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6TcccyQo-1576743462395)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202194641918.png)]

區域填充

多邊形填充算法按掃描線順序進行。

種子填充算法則採用不同的原理:假設在多邊形區域內都有一象素已知,由此出發找到區域內的所有象素。(區域邊界和邊界外的像素具備某個特定值,但是區域內部的像素均不取這個特徵值)

從給定的內部位置(種子)開始,從該點向外繪製,直到遇到指定的邊界條件。這個區域應使用其內部顏色或邊界顏色進行標識。

  • 將所有內部像素着色爲指定顏色=內點表示法
  • 將所有邊界像素着色爲邊界顏色=邊界表示法

種子填充

鄰點屬性:四連通、八連通

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nzddjAZM-1576743462395)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202201018867.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cc7S4POm-1576743462396)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201215423951.png)]

四連通區域的邊界爲八連通區域

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Yp4zQVJQ-1576743462397)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201215741378.png)]

八連通區域的邊界必須是四連通的

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GYiIyNhN-1576743462397)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191201215749563.png)]

掃描線轉換和區域填充的比較:

  • 基本思想不同
    多邊形的掃描轉換:將多邊形的頂點表示轉換成點陣表示。在掃描轉換過程中利用了多邊形各種形式的連貫性。頂點表示:用多邊形的頂點序列來描述,由於未指出哪些像素在多邊形內,所以不能直接進行填充。點陣表示:用多邊形覆蓋的像素點集來描述該多邊形,但是缺少幾何信息。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-h1vQPF6H-1576743462397)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202192746959.png)]
    區域填充:只改變區域的顏色,不改變區域的表示方法。在填充過程中利用了區域的連通性

  • 算法的要求不同
    在區域填充中要求指定區域內的一點爲種子點,然後從這點開始對區域進行着色。
    對多邊形的掃描轉換沒有這個要求。

  • 對邊界的要求不同
    在多邊形的掃描轉換中要求每- -條掃描線與多邊形邊界的交點個數是偶數。
    在區域填充中要求4連通區域的邊界爲封閉的8連通區域,而8連通區域的邊界爲封閉的4連通區域。

反走樣、反混淆

光柵圖形的走樣問題

走樣:低頻採樣(欠採樣)引起的信息失真

用離散的量來表示連續的量所引起的失真稱爲走樣。用來減少或消除走樣的技術稱爲反走樣。

鋸齒狀邊界

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MrgCbJyt-1576743462398)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202201509308.png)]

變形

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xSeQTvJP-1576743462398)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202201739371.png)]

細小圖形失真:像素尺度的限制使得細小圖形無法得到正確顯示。如圖長方形被顯示成線。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vkDsXhkz-1576743462398)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202201929347.png)]

超薄圖元丟失

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6XZkAAY7-1576743462398)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202202030716.png)]

圖形閃爍:顯示器的隔行掃描機制決定的,現在的顯示器一般都是逐行掃描機制,圖形運動時纔有閃爍現象。

反走樣方法:

Adopting area-sampling instead of point sampling(用面積採樣代替點採樣)
Supersampling(過採樣、超採樣)

硬件方法:採用高分辨率光柵顯示
軟件方法:以高分辨率採樣對象並以低分辨率顯示結果

高分辨率採樣:將每個像素劃分爲若干個子像素,如3*3分區。然後計算所有子像素的顏色
低分辨率顯示:用加權掩模將像素的所有子像素顏色相加,計算像素的顏色

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1TghImak-1576743462398)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191202202854832.png)]

USing transitional color scales on the edges(在邊緣使用過渡色階)

  • 精確採樣算法:

Wu’s algorithm for drawing antialiasing lines (繪製抗鋸齒線

Pitteway and Watkinson’s algorithm for drawing antialiasing polygons(繪製抗鋸齒多邊形

可見性判斷

目的:消除二義性、提高繪製效率。

判別可見面

Back- Face Detection(後向面判別)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8MCjLYit-1576743462401)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211151224121.png)]

多邊形面法向量N(A,B,C),視線向量V,世界座標系。若V·N>0,則爲後向面,視角θ。

計算題—Visible-Surface detection methods(可見表面檢測)

Ray Casting Method(光線投射法)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PAf97lxb-1576743462402)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211151655422.png)]

1.通過視點和投影平面(顯示屏幕)上的所有象素點作一入射線,形成投影線

2.將任一投影線與場景中的所有多邊形求交。

3.若有交點,則將所有交點按z值的大小進行排序,取出最近交點所屬多邊形的顏色;
若沒有交點,則取出背景的顏色

4.將該射線穿過的象素點置爲取出的顏色。

Z-buffer method

深度緩衝區(Z緩衝區)、刷新緩衝區。實質:對給定的x,y,尋找最小的z(x,y)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-43tQn23w-1576743462402)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211151940713.png)]

​ 在把顯示對象的每個面上的顏色值填入幀緩衝器前,該點Z座標值與Z緩衝器相應單元進行比較。
當Z座標值 > Z緩衝器值時,用前者替換後者,同時修改緩衝器中的值修改爲該點Z座標值。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FX7mZ2pF-1576743462402)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211152351899.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zKnhFi2e-1576743462402)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211152505901.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HY4vpEpt-1576743462403)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211152523977.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tTcEbOxY-1576743462403)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211152546010.png)]

離得越近,值越大,這個值是根據Z軸來計算得到的。

優點:取代方法優於總體排序,有利於硬件實現。缺點:佔用空間大,沒有利用圖形的相關性與連續性。

  • 如何降低存儲需求?

一次處理屏幕的一個部分,
一次處理屏幕的一個掃描行——Scan-Line z-buffer 方法

Area- Subdivision method(區域子分算法

它是通過將整個觀察區域分成越來越小的矩形來應用的,直到每個小區域是單個可見表面的一部分或根本沒有表面的投影。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7lIb5J4t-1576743462404)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211153334587.png)]

在細分窗口的過程中,需要不斷判斷子窗口與多邊形的關係。共有四種可能的關係:
多邊形包圍了窗口( surrounding)
多邊形和窗口相交( overlapping)
窗口包圍了多邊形(inside)
窗口和多邊形分離(outside)

(1)如果窗口內沒有物體則按背景色顯示

(2)若窗口內只有一個面,則把該面顯示出來

(3)否則,窗口內含有兩個以上的面,則把窗口等分成四個子窗口。對每個小窗口再做上述同樣的處理。
這樣反覆地進行下去

分辨率爲2N*2N的窗口,經過N次細分就可以使子窗口和一個像素的大小一樣了。
1024 X 1024的窗口,經過10次細分即可。

Depth Sorting Method(深度排序算法)

油畫家算法

算法原理:若場景中任何多邊形在深度上均不貫穿或循環遮擋,則各多邊形的優先級順序可完全確定,

深度排序算法:

  1. 先根據每個多邊形頂點z座標的極小值z的大小把多邊形做一個初步的排序。
  2. 設Zmin:最小的多邊形是P,它暫時成爲優先級最低的一個多邊形,把多邊形序列中其他多邊形記爲Q
  3. 依次檢查P和其他各個多邊形的關係
    若能確定P不遮擋某個多邊形Q,則繼續向下判斷
    若不能確定P不遮擋某個多邊形Q,則在多邊形序列中把屍和Q交換一下次序,並對交換後的序列中優先級最低的多邊形Q檢查,看Q是否遮擋別的多邊形
  4. 找到優先級最低的多邊形後,可畫之。然後對剩下的多邊形重複此過程

光照模型

物體表面呈現的顏色是由表面向視線方向輻射的光能決定的。光能大小,決定亮度光譜分佈,決定顏色
RGB三原色。

光照明模型:計算景物表面上任一點投向觀察者眼中的光亮度的大小和色彩組成的公式

光是三種成分的結合:

漫反射、鏡面反射、環境光。

漫反射

由粗糙或顆粒表面會將反射光向各個方向散出去而形成。

垂直於入射光方向的表面會獲取到更多的光照明,比起與入射光方向成斜角的等大小的表面。

朗伯余弦定律:
對於一個漫反射體,表面的反射光亮度和光源入射角(入射光線和表面法向量的夾角)的餘弦成正比。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kJDsomap-1576743462405)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211162928096.png)]

環境光 +漫反射:I = Ka·Ia + Kd·I(l)·(NL)

環境光反射係數Ka,環境光強度Ia,漫散射係數Kd,單位光源方向向量L,表面位置單位法向量N。

鏡面反射

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RGH5q9K1-1576743462405)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211165758232.png)]

Illumination model(光照明模型)

Ambient環境 + Diffuse漫反射 + Specular鏡面反射。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xHfN1Afr-1576743462405)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211164735456.png)]

環境光反射係數Ka,環境光強度Ia,漫散射係數Kd,單位光源方向向量L,表面位置單位法向量N。

I(l)是入射光的強度。

R表示一個理想鏡面反射方向的單位向量;L表示指向點光源的單位向量;V爲指向視點的單位向量;角度φ是觀察方向與鏡面反射方向R之間的夾角。

Phong模型,分別計算RGB分量

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LYBXD2X1-1576743462405)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211170024134.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9E0PVKb6-1576743462406)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191211170038277.png)]

紋理映射

爲什麼我們需要紋理?

  1. 表面細節的建模是渲染真實圖像最重要的任務之一。

例如,如果我們想對磚牆建模,一個選擇是:使用大量具有適當表面顏色和反射特性的多邊形來建模表面細節

什麼是紋理?

一個近似真實的磚牆,稱爲紋理的圖像。紋理應用到物體表面的過程稱爲texture mapping(紋理映射)或texturing(貼紋理)

紋理解決的問題:

  1. 將曲面表示爲紋理圖形。避免了幾何和材質細節的建模。
  2. 渲染一個牆磚 / 紋理,通過光線跟蹤或者硬件來完成。節省了時間和資源。

紋理

  1. texture acquisition獲取:手工繪製、拍照、procedure texture過程紋理、texture synthesis紋理合成
  2. texture mapping貼圖:給定紋理圖像和3D模型,通過指定每個頂點一個紋理座標來指定紋理圖像的顏色。
  3. texture filtering濾波:在決定如何進行貼圖後,需要在渲染過程中進行紋理採樣,否則形成不必要的痕跡。

過程紋理:

柏林噪聲:Perlin Noise Perlin 2002,其基本思想是簡單和優雅。

白噪聲white noise:是一種信號(在所有的頻段都有均勻的分佈!),白噪聲的傅里葉變換是將其進行平坦化。可以通過一個隨機函數來生成!

柏林噪聲:是一個帶限函數,它可以被構造爲不同頻段的白噪聲之和,如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YaruEOhr-1576743462406)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191215153721757.png)]

n爲頻帶總數,p爲持久性,i爲頻帶數,i=0爲最低頻帶

頻帶i處的白噪聲攜帶有特定的圖形尺寸2^i。不同的波段有不同的大小,我們需要在求和之前在它們之間進行插值interpolate。持久性Persistence是用戶指定的參數[ 0 ~ 1 ],它只控制不同頻帶的相對權重。

在柏林噪聲的基礎之上,可以合成大理石和木材的紋理。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KTDZUSno-1576743462406)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191215153529989.png)]

紋理合成

Pixel-based texture synthesis 。基於像素的

Patch-based texture synthesis。基於面片的

基於像素的紋理合成:
該方法中每個像素的值由其局部鄰域來決定,從相似臨近的區域選擇要輸入的像素。

基於片的紋理合成:
基於像素的方法可以通過合成塊來改進。重要算法:圖像切割。片的選擇也是根據相匹配的鄰居來進行的。

紋理貼圖

給定模型和一個2D紋理圖像。
通過表面映射函數(surface mapping function),將該圖像上的點映射到模型上的(u,v)座標處。
在對模型上的一個點進行着色時,將從2D紋理中找到一個合適的像素並以此來生成最終的顏色。

如何定義一個表面映射函數?

通過自然參數化規則對象。如球體,立方體,圓柱

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EIoq4jKY-1576743462406)(G:%5Cmd_files%5Cphoto_file%5Cimage-20191215160949482.png)]

通過手動指定紋理座標。複雜物體的每個頂點都被指定爲紋理座標

紋理過濾

Aliasing(走樣) and anti- aliasing(反走樣

方法一:設置較高的採樣頻率。
方法二:將信號預濾波設置成低頻信號。

Isotropic(各向同性) filltering

Mipmapping:構建一個金字塔形的圖像,在原始圖像的1/2、1/4、1/8等位置進行預過濾和重新採樣。

Anisotropic(各向異性) Filtering

通過預計算各向異性濾波建立 ripmap 代替 mipmap 。

三種紋理

  • Solid textures 體紋理
    3D紋理數組(用函數[xyz] -> [RGB] 將顏色映射爲點。
    紋理比顏色更重要。
  • Bump mapping 凹凸紋理
    使用紋理來改變表面的法線,不會改變表面的實際形狀,只是陰影。
  • Displacement mapping 位移紋理
    使用位移紋理來實際移動表面的點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章