OpenGL

OpenGL ZFighting闪烁

2019-05-16  本文已影响0人  寻常_0

原因

出现ZFighting闪烁问题的原因是因为,我们打开深度测试后,OpenGL就不会绘制模型背遮挡的部分,但是由于深度缓冲区的精度限制,假如两个两者深度非常接近的时候,OpenGL 就无法正确判断出两者的深度值,会导致渲染的结果无法预测,显示出来的图像交错闪烁。(如下图时而渲染出绿色,时而渲染出红色,无法确定,交错闪烁)


ZFighting闪烁
ZFighting闪烁

问题解决

第一步:启⽤用 Polygon Offset ⽅方式解决

解决⽅法: 让深度值之间产生间隔.在执行深度测试前将立方体的深度值做一些细微的增加.于是就能将重叠的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
第三步: 关闭Polygon Offset

glDisable(GL_POLYGON_OFFSET_FILL)

问题预防

上一篇下一篇

猜你喜欢

热点阅读