1. 程式人生 > 其它 >真實感渲染:變換(二維與三維)

真實感渲染:變換(二維與三維)

大家好~本課程為“真實感渲染”的線上課程,從0開始,介紹相關的圖形學演算法和數學基礎,給出詳細的數學推導、虛擬碼和實現程式碼,最終帶領大家開發出基於物理的渲染器

線上課程資料:

本節課錄影回放

加QQ群,獲得ppt等資料,與群主交流討論:106047770

本系列文章為線上課程的覆盤,每上完一節課就會同步釋出對應的文章

本課程系列文章可進入索引檢視:
真實感渲染系列文章索引

目錄

回顧相關課程

  • 什麼是矩陣?

為什麼要學習本課

  • 3D中物體有哪些變換?
    答:平移、旋轉、縮放

  • 演示相關的變換

  • 3D到2D的投影需要進行變換

主問題:什麼是2D變換

  • 如何進行縮放?

    • 縮放矩陣是多少?
      答: \( \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \)

    • 如何進行反射?

      • 反射矩陣是多少?
        答: \( \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \)
  • 如何進行旋轉?

    預設為繞著原點(0, 0)逆時針旋轉

    • 旋轉矩陣是多少?

      \( R_\theta = \begin{bmatrix} ? & ? \\ ? & ? \end{bmatrix} \)
      答:\( R_\theta = \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \)

推導過程如下圖所示:

通過變換(1,0)點,可以得到矩陣的A、C值:


同理,通過變換(0,1)點,可以得到矩陣的B、D值

  • 什麼是線性變換?
    答:

  • 縮放和旋轉是否屬於線性變換?
    答:是

  • 如何進行平移?

    • 它的表示式是什麼?
      答:
\[\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix} \]
  • 如何進行平移?
    • 能夠得到2D的平移矩陣嗎?
      答:不能
    • 平移屬於線性變換嗎?
      答:不屬於

主問題:什麼是齊次座標

為什麼要引入“齊次座標”

  • 如何才能統一縮放、旋轉、平移為都使用一個矩陣來變換?
    答:引入齊次座標

  • 什麼是齊次座標?
    答:

  • 向量+向量=?
    答:向量

  • 點-點=?
    答:向量

  • 點+向量=?
    答:點

  • \( \begin{bmatrix} x \\ y \\ w \end{bmatrix} = ? \\ 其中:w \neq 0 \)
    答:
    \( \begin{bmatrix} x \\ y \\ w \end{bmatrix} = 2D 點: \begin{bmatrix} \frac{x}{w} \\ \frac{y}{w} \\ 1 \end{bmatrix} \)

  • 點+點=?
    答:因為相加的結果經過上面的變換後,可變換為點,所以相加的結果為點

  • 用加了齊次座標的矩陣來表達平移的表示式是什麼?
    答:

\[\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1\\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ 1 \end{bmatrix} \]

主問題:更多的2D變換有哪些

  • 什麼是仿射變換?
    答:

  • 用齊次座標後如何修改?
    答:

  • 用齊次座標後,縮放、旋轉、平移的矩陣是什麼?
    答:

  • 什麼是逆變換?
    答:

  • 如何進行組合變換?

    • 如何進行下圖的變換?

    答:有兩種方式:先位移再旋轉和先旋轉再位移

變換的順序對結果有影響!

這裡應該使用先旋轉再位移,表示式為:

  • 如何進行組合變換?
    • 如何提高效能?
      答:

    • 如何繞一個點旋轉?
      答:

    • 表示式是什麼?
      答:

主問題:什麼是3D變換

  • 什麼是3D的齊次座標?
    答:

  • \( \begin{bmatrix} x \\ y \\ z\\ w \end{bmatrix} = ? \\ 其中:w \neq 0 \)
    答:
    \( \begin{bmatrix} x \\ y \\ z\\ w \end{bmatrix} = 3D 點: \begin{bmatrix} \frac{x}{w} \\ \frac{y}{w} \\ \frac{z}{w} \\ 1 \end{bmatrix} \)

  • 什麼是3D的仿射變換?
    答:

\[\begin{bmatrix} x' \\ y' \\ z' \\ \end{bmatrix} = \begin{bmatrix} a & b& c \\ d & e& f \\ g & h& i \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \\ t_z \\ \end{bmatrix} \]
  • 用齊次座標後如何修改?
    答:
\[\begin{bmatrix} x' \\ y' \\ z' \\ 1\\ \end{bmatrix} = \begin{bmatrix} a & b& c & t_x \\ d & e& f & t_y \\ g & h& i & t_z \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1\\ \end{bmatrix} \]

總結

  • 請總結本節課的內容?
  • 請回答開始的問題?

參考資料

擴充套件閱讀