2013-01-14 98 views
6

將世界空間中定義的表面法線轉換爲屏幕空間法線的正確方法是什麼?我不認爲它們可以簡單地乘以投影矩陣,因爲透視分割將事物轉換成剪輯空間,並且據我所知,在這個空間中,與圖像平面共面的平面保持共面。將世界空間法線轉換爲屏幕空間法線

但是我正在尋找的轉換應該會導致轉換後的法線,使得圖形A中描繪的藍色世界法線應該導致不同的屏幕空間法線(因爲即使它們的平面與圖像平面共面,它們也不會面對相機) - 另一方面,圖形B中描繪的法線應該在變換之後(或多或少)相等,因爲它們的表面面向相機。

enter image description here

我在找什麼轉變?如何計算它?

我需要一些屏幕空間效果。

回答

-1

您正在尋找基於尊重的變換矩陣。關於如何計算這個矩陣的步驟有非常好的視頻。檢查KhanAcademy video

編輯

您沒有提供您使用(OGL,DX,着色器,自己的投影,...),其中關於技術的任何信息,但你絕對應該閱讀有關切空間的一些文章,例如Messing with Tangent Space ..

+0

我知道如何將法線從切線空間轉換到物體空間或世界空間,或反之亦然。雖然 – user1282931

+0

但是這不包括屏幕空間但是如何將一些對象的法線連接到屏幕空間..?法線總是正常的,從哪個點看他們並不重要.. – Sorceror

0

嘗試按照通常在從模型(查看)空間轉換法線時完成的操作 - 使用逆轉換矩陣。

+1

這不包括我的問題。這是關於正常轉換眼球空間。這不是關於投影 – user1282931

+1

是的,我看到它並不那麼簡單。在你的情況下,正常轉換的結果取決於具有這種正常表面的**位置** ... – kerim

+0

@ user1282931 - 你可以在眼睛空間中執行屏幕空間效果嗎?確切地說 - 每個法向矢量的起點影響結果!不,我不能在眼睛空間裏表演。我需要根據屏幕空間normalvector – kerim

0

假設您想要通過任意4x4矩陣將P點的法線N變換。讓我們代表與模型部分T(具有旋轉,縮放和平移)矩陣,並與最後一排的一部分W.這使得我們可以說:

Transform(P) = (T * P)/dot(W,P) 

現在,預計正常可以看出作爲極限(d - > 0)的:

(Transform(P+dN) - Transform(P))/d 

展開該方程式,然後從兩個提名和分母劃掉「d」導致這個公式:

dot(W,N) * (Transform(N) - Transform(P))/dot(W,P) 

這是未經測試和未經驗證的,但我認爲給這個問題缺乏積極的答案,我會給它一個鏡頭;)

相關問題