2011-08-15 101 views
4

我想實現一個簡單的光線跟蹤算法 所以第一步是轉換像素座標成UVW座標系統 使用這兩個公式,我在發現IAM書 enter image description here得到UVW從像素座標座標射線追蹤

其中L,R,b,T是視錐點中,(i,j)是像素的索引,(NX,NY)是場景的寬度和高度

然後計算規範我使用的座標

enter image description here

我想明白了上面的公式,爲什麼他們給了不是正交投影透視投影UWV座標(當我使用正交投影方程依然給人彷彿使用透視投影結果)

回答

3

讓我們假設你的相機是某種金字塔。它有一個我稱之爲「相機屏幕」的底面,金字塔的高度(也稱爲焦距)將標記爲F(或在您的方程式中,Ws)。

  T(op) 
     *---------* 
     |\  /| 
     | \ /| 
     | \ /| 
     | \/ | 
L(eft) | *E(ye| R(ight) 
     | /\ | 
     |/ \ | 
     |/ \ | 
     |/  \| 
     *---------* 
     B(ottom) 

假設j從底部到頂部(從-Ny/2+Ny/21/Ny步)前進,並i從左至右(從-Nx/2+Nx/21/Nx步)前進。請注意,如果Ny是偶數,則j上升到Nx/2-1(當Nx是偶數時,類似)。

當你從底部往屏幕上的圖像在頂部,,你從B值到T值移動。在級分(底部和1 =頂部之間= 0)的從底部看到的方式來頂部d,你的高度是

Vs = T + (B-T) * d 

瞎搞的位表明分數d實際上是:

d = (j + 0.5)/Ny 

所以:

Vs = T + (B-T) * (j + 0.5)/Ny 

而且類似:

Us = L + (R-L) * (i + 0.5)/Nx 

現在,讓我們將U表示爲從左到右的向量,V從下到上,'W'從眼前向前。所有這些矢量都被標準化了。

現在,假設眼睛直接位於(0,0)之上,那裏恰好位於金字塔矩形面的中心上方。

從眼睛直接去(0,0)你會去:

Ws * W 

然後從該點到在索引屏幕上的另一點(i,j)你會去:

Us * U + Vs * V 

您將能夠看到Us = 0i = 0Vs = 0j = 0(因爲B = -TL = -R,因爲眼睛直接位於中心之上的矩形)。

最後,如果我們組合在一起,在指標(i,j)屏幕上的一個點是

S = E + Us * U + Vs * V + Ws * W 

享受!

+0

偉大的例證,謝謝:) –

+0

我在我的解釋中修復翻轉的底部和頂部。方程式是正確的。所以如果某個地方沒有意義,請嘗試重新閱讀。很高興有幫助:) –