出現ZFighting閃爍問題的緣由是由於,咱們打開深度測試後,OpenGL就不會繪製模型背遮擋的部分,可是因爲深度緩衝區的精度限制,假如兩個二者深度很是接近的時候,OpenGL 就沒法正確判斷出二者的深度值,會致使渲染的結果沒法預測,顯示出來的圖像交錯閃爍。(以下圖時而渲染出綠色,時而渲染出紅色,沒法肯定,交錯閃爍) bash
解決⽅法: 讓深度值之間產生間隔.在執行深度測試前將立方體的深度值作一些細微的增長.因而就能將重疊的2個圖形深度值之間有所區分 //啓用Polygon Offset glEnable(GL_POLYGON_OFFSET_FILL)
參數列表: GL_POLYGON_OFFSET_POINT
GL_POLYGON_OFFSET_LINE
GL_POLYGON_OFFSET_FILL
測試
void glPolygonOffset(Glfloat factor,Glfloat units);
應⽤到片斷上總偏移計算⽅方程式:
Depth Offset = (DZ * factor) + (r * units); DZ:深度值(Z值)
r:使得深度緩衝區產生變化的最小值
負值,將使得z值距離咱們更近,而正值,將使得z值距離咱們更遠,咱們設置factor和units設置爲-1,-1
複製代碼
glDisable(GL_POLYGON_OFFSET_FILL)
spa