2017-04-22 42 views
1

恢復ž我想了解如何從深度緩存中恢復z和試圖做數學題的基礎上,這兩個職位:OpenGL的從深部

Getting the true z value from the depth buffer(計算器) http://ogldev.atspace.co.uk/www/tutorial46/tutorial46.html

的兩個帖子使用不同的投影矩陣(具體地說,右下角的2x2部分是不同的,其中一個差別是在[3] [4]中使用-1對a + 1)。不知道爲什麼會這樣,afaik -1是一個「正確的OpenGL投影矩陣」(對吧?)

現在我試着做兩個計算,奇怪的是,在SO-發佈它提到-AB/z(或者在我的計算中--ST/z)。然後代碼顯示

enter image description here

和解決此爲A和B(或S,T)給出了

enter image description here

好,現在在做計算從頭兩個投影矩陣, (left = ogldev.atspace.co.uk,right = stackoverflow),現在它變得令人困惑,因爲直到-ST/z部分一切都很好,但是當我們比較已經解決的公式時應該是stackoverflow的情況下-1投影矩陣)它匹配ogldev.atspace.co.uk(+1投影矩陣) - 用紅色的字...

enter image description here

這是混亂的,任何線索我在做什麼錯?

更新計算,見從「derhass」下面的評論: enter image description here

+0

不知道你的圖像目前無法訪問......無論如何可能將原始深度值存儲到深度緩衝區本身會繞過你的問題請參閱[如何在iOS中正確地線性化OpenGL ES的深度?](http ://stackoverflow.com/a/42515399/2521214) – Spektre

+0

嗯,我看到圖像...他們需要'批准'或......嗎?這裏有一個鏈接:http://www.kalmiya.com/images/stackoverflow/so-math1.png/ http://www.kalmiya.com/images/stackoverflow/so-math2.png/ http:// www。 kalmiya.com/images/stackoverflow/so-depthproj-compare.png ...感謝您的鏈接,將檢查出來。一般來說,它更多的是瞭解如何和爲什麼。 – kalmiya

+0

那麼你的問題到底是什麼?最後一行的符號區分左手系和右手系。你有沒有檢查你的推導是否正確? –

回答

1

兩個柱使用不同的投影矩陣(特別是 右下的2×2部分是不同的,一個區別在於使用的-1 vs [3] [4]中的 a +1)。真的不知道爲什麼,這將是,據我所知的一個 與-1是「正確的OpenGL的投影矩陣」(是嗎?)

號沒有「對」與「錯」在這裏。有公約。對於您選擇使用的慣例,「正確」矩陣是正確的。 Classic GL的glFrustum函數確實使用了StackOverflow後的矩陣。這裏的約定是投影中心在原點,視角方向是-z,x是對的,並且y向上。但是您可以使用任意約定,任意主點和任意投影方向。另一個矩陣只是+z作爲投影方向,可以解釋爲座標空間的翻轉手性。它也可以被解釋爲只是在保持左手座標系的同時向相反方向看。

這是混亂,任何線索我做錯了什麼?!

我不知道你想在這裏證明,除了這個事實,引入小牌子的錯誤會給虛假的結果是什麼?

你推導爲「+ z」的投影矩陣似乎好。它將depth=0映射到z=ndepth=1z=f,這是映射這些的標準方法 - 也是另一個約定。你也可以使用一個反相器Z映射,其中近平面映射到深度爲1,和遠平面映射到深度0

UPDATE

對於第二個矩陣,你翻牌 再次,即使在我的評論更正之後。當你代替 ST回到最終公式中時,你實際上用 -S代替了。如果你做了正確的替換,你將得到 [現在在你再次修正了這個值之後,你已經得到了] 012malaa formala,這正好是+z矩陣情況下的否定值 - depth = 0映射到-n,並且深度= 1到-f,這是激動人心的如何在傳統的GL約定中定義這些參數,其中nf只是在查看方向(-z)描述了與這些平面的距離。

+0

感謝您的耐心解釋。我更新了圖像以匹配這個。正如你所注意到的,數學並不是我最強的技能 - 但在我的防守中,至少我確實試圖計算它,而不是簡單地複製並粘貼來自後綴^^的着色器代碼。現在開始變得更有意義。也很高興看到如何驗證深度的結果 – kalmiya

+0

你不需要爲自己辯護,沒有人攻擊你......;)如果你試圖瞭解這些事情,我建議實際上繪製方程式。 – derhass