2011-03-23 39 views
2

我有兩個共面多邊形。OpenGL Z偏置(多邊形偏移)限制

我試過了。

glEnable(GL_POLYGON_OFFSET_FILL); 
glPolygonOffset(0,1); 

並且期望一個明顯地位於另一個「之上」。

直到大約70-75個單位爲止(近剪裁平面爲1,遠剪裁平面爲10,000)。然後是一個約50個單位的區域,其中有z-格鬥,然後交替多邊形似乎出現在頂部。

在正常z-計算之前或之後是否添加了多邊形偏移量?如果是在之後,我會認爲它會在所有距離上「發揮作用」。

我使用了錯誤的值嗎?我誤解了預期的結果嗎?或者應該這樣工作,而且我可能在其他地方做錯了什麼?

我很害怕嘗試更大的值,因爲場景中還有其他物體,如果數量足夠大,他們也可以在遠處「跳」到那些物體的前面。

回答

2

我還沒有使用過glPolygonOffset,但是我只是在official FAQ上閱讀過它 - 如果您還沒有看到這個,需要閱讀。還有man page

根據該參考文獻中,偏移被計算的正常的Z的計算,但深度測試之前和被寫入深度緩衝器之前施加

我可以想到兩個問題。首先,FAQ建議您使用glPolygonOffset(1,1),而不是(0,1)。第一個「因子」參數乘以多邊形的斜率並加到偏移量上。這對於「邊緣」多邊形顯然很重要。如果多邊形面向相機,則無關緊要,但如果角度爲某個角度,則需要向前推動它的量會隨角度增加。

其次,你是否只爲其中一個多邊形啓用偏移量?如果你爲它們啓用了它(或者忘記禁用它),那麼它將應用於兩個多邊形,並且具有零效應。第三,我懷疑你的深度緩衝區太大了(因爲深度緩衝區有一個雙曲線尺度,有利於靠近相機的物體)。我對此並不是很確定,因爲glPolygonOffset應該可以使用深度值,而不是Z值(因此深度緩衝區的比例不應該是此處的因素)。你可能想用較短的深度緩衝區(也許是1000)嘗試它,看看是否有所作爲。

0

你可以嘗試設置一個多邊形偏移正一偏移負數,我敢打賭,這將工作。

glPolygonOffset(0,1)和glPolygonOffset(0,-1)