美文网首页
z冲突(闪烁问题)

z冲突(闪烁问题)

作者: 番茄炒西红柿啊 | 来源:发表于2020-07-16 15:44 被阅读0次

开启深度测试后, 如果深度值误差很小,由于深度缓冲区精度有限,此时OpenGL会出现无法判断的情况,导致画面交错闪烁的现象。


如图,红框和绿框重叠部分,它们深度值过于相近,无法分别出图层的先后顺序,便会出现红绿闪烁的情况。

处理该问题可以采用在绘制前开启多边形偏移的方案

    1. 开启多变形偏移
glEnable(GL_POLYGON_OFFSET_FILL)
多边形偏移枚举值 对应的图像填充模式
GL_POLYGON_OFFSET_POINT GL_POINT
GL_POLYGON_OFFSET_LINE GL_LINE
GL_POLYGON_OFFSET_FILL GL_FILL

用哪种方式填充的图像,就开启对应的偏移.

    1. 指定偏移量glPolygonOffset (GLfloat factor, GLfloat units);参数一般填 -1 和 -1
    1. 在绘制完成后,关闭多边形偏移glDisable(GL_POLYGON_OFFSET_FILL)
      预防ZFighting闪烁

z-fighting问题的预防:

  • 避免两个物体靠的太近:在绘制时,插入一个小偏移
  • 将近裁剪面(设置透视投影时设置)设置的离观察者远一些:提高裁剪范围内的精确度
  • 使用更高位数的深度缓冲区:提高深度缓冲区的精确度

相关文章

网友评论

      本文标题:z冲突(闪烁问题)

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