我想實現一個簡單的光線跟蹤算法 所以第一步是轉換像素座標成UVW座標系統 使用這兩個公式,我在發現IAM書 得到UVW從像素座標座標射線追蹤
其中L,R,b,T是視錐點中,(i,j)是像素的索引,(NX,NY)是場景的寬度和高度
然後計算規範我使用的座標
我想明白了上面的公式,爲什麼他們給了不是正交投影透視投影UWV座標(當我使用正交投影方程依然給人彷彿使用透視投影結果)
我想實現一個簡單的光線跟蹤算法 所以第一步是轉換像素座標成UVW座標系統 使用這兩個公式,我在發現IAM書 得到UVW從像素座標座標射線追蹤
其中L,R,b,T是視錐點中,(i,j)是像素的索引,(NX,NY)是場景的寬度和高度
然後計算規範我使用的座標
我想明白了上面的公式,爲什麼他們給了不是正交投影透視投影UWV座標(當我使用正交投影方程依然給人彷彿使用透視投影結果)
讓我們假設你的相機是某種金字塔。它有一個我稱之爲「相機屏幕」的底面,金字塔的高度(也稱爲焦距)將標記爲F(或在您的方程式中,Ws)。
T(op)
*---------*
|\ /|
| \ /|
| \ /|
| \/ |
L(eft) | *E(ye| R(ight)
| /\ |
|/ \ |
|/ \ |
|/ \|
*---------*
B(ottom)
假設j
從底部到頂部(從-Ny/2
到+Ny/2
在1/Ny
步)前進,並i
從左至右(從-Nx/2
到+Nx/2
在1/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 = 0
爲i = 0
和Vs = 0
爲j = 0
(因爲B = -T
和L = -R
,因爲眼睛直接位於中心之上的矩形)。
最後,如果我們組合在一起,在指標(i,j)
屏幕上的一個點是
S = E + Us * U + Vs * V + Ws * W
享受!
偉大的例證,謝謝:) –
我在我的解釋中修復翻轉的底部和頂部。方程式是正確的。所以如果某個地方沒有意義,請嘗試重新閱讀。很高興有幫助:) –