在圖形學中,計算光照模型時,經常需要求取反射向量,一般的shader函數庫都提供計算反射向量的方法,下面介紹一下如何手動計算反射向量。
給定入射光線向量I和平面法向量N,求反射向量R,如下圖。為了方便計算,這里假定I和N都是單位向量(模為1,編程時可先將I和N單位化)
方法一

設入射光線向量I和反射平面的法向量N之間的夾角為theta。連接I的始端和R的末端,則有
R = 2P - I (1)
現在問題變成了如何求取P,設入射點0到P與N的交點的向量為S,那么有
P = I + S (2)
現在問題變成了如何求取向量S,向量S即向量-N(注意,這里是-N,因為S和N的方向相反。)在向量N上的投影,根據向量的投影公式有

因為N是單位向量,簡化一下得到

將S代入公式(2),再將P代入公式(1)得到

方法二
將R平移一下,與向量N的延長線相交。

由於入射角和反射角相等,且I和R的長度也相等,所以三角形ION是等腰三角形。故有
ON = 2S
所以有
R = I + 2S
而S是-I在N上的投影,所以有

由於N是單位向量,簡化一下得到

所以

貌似方法二更直觀些。
