反射向量 及 向量投影


求反射向量

在圖形學中,計算光照模型時,經常需要求取反射向量,一般的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是單位向量,簡化一下得到

所以

貌似方法二更直觀些。

 

向量投影

給定一個向量u和v,求u在v上的投影向量,如下圖。

假設u在v上的投影向量是u’,且向量u和v的夾角為theta。一個向量有兩個屬性,大小和方向,我們先確定u’的大小(即長度,或者模),從u的末端做v的垂線,那么d就是u’的長度。而u’和v的方向是相同的,v的方向v/|v|也就是u’的方向。所以有

                          (1)

再求d的長度。

                      (2)

最后求cos(theta)

                   (3)

聯合求解方程(1)(2)(3)得到

這就是最終的投影向量。

而這個向量的長度d是

============================

以下是舊的推導,也保留。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM