[Graphics] 光源反射向量圖形意義(Vector Reflection)

本篇將以圖形意義說明反射向量計算公式,若有興趣了解 r = d-2(d ∙ n) n 的物理意義的話,歡迎參考看看唷。

Tiffany Chen
82年生的蒂芬妮
Jul 4, 2024

--

計算光源反射向量(Vector Reflection)

最近在寫 Phong Lighting Model[1] 時直接用了內建 API— reflect()[2],來計算光源碰到平面的反射角。後來想說查一下如果沒有這個 API 的話,要怎麼計算反射向量。於是,查到了這個式子:

r = d-2(d ∙ n) n

看著這個公式,畫著向量在紙上,想不懂為什麼這樣可以算出反射向量。於是花了點時間想了一下反射向量公式的圖形意義,也查到了這篇很棒的示意圖 — Vector reflection at a surface[3],在這裡筆記起來,若有相同疑問的話,歡迎參考看看唷。

💡 Contents:
1. 反射向量計算公式
2. 物理意義
3. 總結

1. 反射向量計算公式

反射向量計算公式為:

r = d-2(d ∙ n) n

在這邊假設向量都已正規化(normalized),即向量長度都為 1。

反射向量計算公式:r = d-2(d ∙ n) n

2. 物理意義

接下來,用向量的方式來看看這個公式怎麼導出來的吧!

  1. 為了方便後面理解,先畫出 d 的反方向 d’,即 d’ = -d。

2. 將 d’ 投影到 n,即圖中 (d’ ∙ n) n。

3. 用向量加法,則可導出紫向量 d + (d’ ∙ n) n,因為向量加法在圖形上的意義是起點連向終點的向量。

4. 把這個向量拉長兩倍,就會延伸如下圖 2(d + (d’ ∙ n) n)。

5. 最後一步了!同樣依向量加法的物理意義,可得反射向量 r = d’ + 2(d + (d’ ∙ n) n)。整理整理之後,就變成網路上查到的反射向量公式啦!

3. 總結

本篇中,我們以向量的圖形意義走過反射向量公式 r = d -2(d ∙ n) n 的由來。雖然現在很多 API 很方便,但了解背後原理的好處是,可以增加一些 sense。有時候比較進階的演算法是從基本的模型變形而來,有事沒事看看背後的原理能增加一些感覺。如果對先前提到的 Phong Lighting Model 的實作有興趣的話,原始碼放在 Github [4],歡迎參考看看唷。

-2024.07.04。

想敲碗什麼樣的內容,或資訊有誤/欲補充的話,歡迎在下方留言讓我知道,不好意思公開的話,也歡迎在Google 表單留言 : )

如果覺得文章有幫助的話,也歡迎點擊連結,贊助我一杯咖啡唷☕

--

--

Tiffany Chen
82年生的蒂芬妮

Graphics Software Engineer @ MD。白天是名軟體工程師,晚上偶爾寫寫 blog,2021年秋天跟著 DRT 搬至美國亞利桑那州居住,記錄AZ新鮮人的日常生活&軟體工程筆記。現居MD。