【3D數學基礎】三維空間折射向量計算


問題:在三維空間中,已知折射率 e 、入射角 L 和法線 N。

要求:計算出折射向量 T。

其中 L、 N 和 T 都為單位向量。

如圖片所示,下面所有的公式都看着這張圖片來求解的:

image

首先,我們必須了解折射定律:

image

因為 N、T、L都是單位向量,所以:

image

那么可以從圖中看出:

image

接着,如圖中所示,做出輔助向量 t1 、t2、l1、l2,他們滿足於:

image

注意這里的 l2 、 t2 都是平行於 N 且反向的。l1 、 t1 都是垂直於 N 的。

接着有:

image

可得

image

那么:

image

而 l1 和 t1 是同向的,所以可以直接去掉絕對值:

image

另外,還有:(再強調一次,這里的 l2 、 t2 都是平行於 N 且反向的。l1 、 t1 都是垂直於 N 的。)

image

那么:

image

那么:

image

還需要求解 t2 ,又是利用 N 與 t2 方向相反且 N 為單位向量的條件:

image

那么現在可以寫出答案了:

image

整理一下:

image

為什么要這樣寫呢?這是因為,我是按照 Nvidia 公司的 CG 手冊給出的公式來整理的:

image

可以發現 cg 函數中的 refract 的 i 對應於我們的 L,n 對應於我們的 N , eta 分量是對應於的我們這里的 1 / e。

為了對應於 cg 函數,我們這里用 w 代替  1/e,寫出新的公式:

image

而對於 cg 函數中最后一句 return 語句的寫法,是用來處理全反射現象的。

簡而言之,cosθ2 <= 0 的時候就發生了全反射現象。

 

其他解釋可以看下面的黑體字,來自http://www.cnblogs.com/starfallen/archive/2012/11/05/2754992.html 我稍微做了調整:

由於在不同的情況下 e 的值是不同的,再配合上入射角θ1取值,完全可以讓1-(1/e²)(1-cos²θ1)的值小於0,這樣上面等式中的cosθ2豈不是就無意義了?

而事實上,這正是全反射現象。當光線從光密介質進入光疏介質的時候,如果入射角大於某個臨界角時,會發生全反射現象。這個臨界角就是是折射角為90度時對應的入射角,也就是cosθ2剛好等於0的時候。

 

參考資料:

1. http://www.cnblogs.com/starfallen/archive/2012/11/05/2754992.html

2. cg-3.1 參考手冊 《Cg-3.1_April2012_ReferenceManual》,747 頁,

http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_ReferenceManual.pdf


免責聲明!

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



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