美文网首页
OpenGL 中 ZFighting 闪烁问题

OpenGL 中 ZFighting 闪烁问题

作者: AndyGF | 来源:发表于2020-07-12 16:07 被阅读0次

这个问题现在比较少见, 我们先来看看具体表现

ZFighting 闪烁现象

为什么会出现 ZFighting 闪烁问题

ZFighting错误.png ZFighting正确.png

因为开启深度测试后,OpenGL 就不会再去绘制模型被遮挡的部分. 这样实现的显示更加真实.但是由于深度缓冲区精度的限制对于深度相差非常⼩的情况下.(例如在同一平面上进行2次绘制),OpenGL 就可能出现不能正确判断两者的深度值,会导致深度测试的结果不可预测.显示出来的现象是交错闪烁. 现在的设备精度在开发中很少遇到这种情况,

解决方案: 开启多边开偏移 Polygon Offset

第⼀步: 启用 Polygon Offset ⽅式解决.

glEnable(GL_POLYGON_OFFSET_FILL)

第二步: 指定偏移量.
通过 glPolygonOffset 来指定. glPolygonOffset 需要2个参数: factor , units
每个 Fragment 的深度值都会增加如下所示的偏移量:
m : 多边形的深度的斜率的最大值,理解一个多边形越是与近裁剪面平行,m 就越接近于0.
r : 能产生于窗口坐标系的深度值中可分辨的差异最小值.r 具体是由OpenGL 平台指定的 一个常量
一个大于0的Offset 会把模型推到离你(摄像机)更远的位置,相应的一个小于0的Offset 会把模型拉近
一般⽽言,只需要将-1.0 和 -1 这样简单赋值给 glPolygonOffset 基本可以满⾜需求.

zfighting.png

相关文章

网友评论

      本文标题:OpenGL 中 ZFighting 闪烁问题

      本文链接:https://www.haomeiwen.com/subject/ftzgcktx.html