2015-08-08 126 views
0

如何在openGL中混合使用投影和透視投影? 一些2D元素必須在屏幕空間中繪製(無縮放,旋轉等)。 這些2D元素有一個Z位置,它們必須出現在其他3D元素的前面/後面。因此我設置地形投影,繪製所有2D元素,然後設置透視投影並繪製所有3D元素。 結果是所有的2D元素都在頂部繪製。似乎來自投影的z值和來自透視投影的z值不兼容(GL_DEPTH_TEST)。opengl混合透視和直接投影

另外所有的2D和所有的3D元素工作正常,問題是當我嘗試混合他們。 預測投影是否改變z值?以什麼方式? 是否有可能使用來自透視投影的z值與來自透視投影的z值進行深度測試,或者這個整體概念是否有缺陷?

裸opengl1.5

+0

看看[這個問題](http://stackoverflow.com/questions/31692210/a-depth-buffer-with-two-different-projection-matrices/)。 – derhass

回答

0

似乎從沃爾託突起從透視投影的Z值和z值不兼容(GL_DEPTH_TEST)。

確實如此。透視變換將Z值非線性映射到深度緩衝區值。解決此問題的常用方法是將透視圖之後的深度緩衝區複製到深度紋理中,並將其用作正交繪製材質的片段着色器中的附加輸入,反轉深度輸入中的非線性並將輸入的Z與之協調;然後適當丟棄。

也可以在透視繪製的幾何片段着色器中發出線性深度值,但透視投影的深度非線性有其目的;沒有它,你會在最重要的地方鬆動深度精確度,接近觀點。