2013-03-13 263 views
0

因此,我正在閱讀關於特定着色算法的論文,並且有一個部分似乎有點模糊,我想知道是否可以在此處獲得建議。傳遞深度緩衝區

基本上它說我首先需要一個網格的3D頂點,並將其轉換爲窗口座標wx,wy,wz,其中wz是深度。這部分我已經完成了。

接下來我必須測試這個窗口座標是否「通過」深度緩衝區。

這就是它所說的,我不確定「傳遞」深度緩衝區是什麼意思。有沒有人知道這可能意味着什麼,以及如何在openGL中實現這一點?

編輯:

更具體地說,我需要openGL的給我提供反饋,以特定的頂點是否未通過深度緩衝。我實際上並沒有渲染這些頂點,所以如果openGL在「幕後」執行所有計算,那對我來說並不好。

+0

你在維基百科找到這個嗎? http://en.wikipedia.org/wiki/Z-buffering – acrilige 2013-03-13 13:02:14

+0

是的,但它有點混亂。所以我知道我的'wz'組件是像素的深度,但我感到困惑的是顯然openGL有一個內置的z緩衝區值,我可以比較我的wz術語,但我不知道如何訪問該初始z值。 – user1782677 2013-03-13 13:04:36

+0

查看OpenGL管道概述,例如:http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization此頁面有深度測試說明。實際上,它是管道的一部分,你可以禁用或不管,但你不需要自己做這個深度測試。 – acrilige 2013-03-13 13:09:29

回答

3

深度測試是OpenGL流水線的一部分,應在片段(像素)着色器後調用。所以你不需要自己做,所有你需要做的就是正確地初始化你的投影矩陣和視口,這樣你的每個頂點的Wz就被計算出來,然後插入到頂點之間。您可以配置此測試的一些屬性。

這裏是OpenGL的管道概述:http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization 看第7章:每樣加工

The depth test, if any, is performed; if it fails, then the fragment is culled and not added to the framebuffer.


你說,你要知道其中頂點通過深度測試。但深度測試僅調用片段,而不是在頂點上。因此,如果您已經有了x,y和z座標的頂點,那麼您可以檢查具有相同(x,y)座標的z座標,並確定他們中的哪些人將贏得此深度測試...