使用Polygon Offset解决Z-fighting和stitching

     在OpenGL中,如果想绘制一个多边形同时绘制其边界,可是先使用多边形模式GL_FILL绘制物体,然后使用多边形模式GL_LINE和不同的颜色再次绘制这个多边形。但是由于直线和多边形的光栅化方式不同,导致位于同一位置的多边形和直线的深度值并不相同,进而导致直线有时在多边形的里面,有时在多边形的外面,这种现象就是“Sitching”。

    而Z-fighting主要是指当两个面共面时,二者的深度值一样,深度缓冲就不能清楚的将它们两者分离开来,位于后面的图元上的一些像素就会被渲染到前面的图元上,最终导致图象在帧与帧之间产生微弱的闪光。

    解决这两个问题的方法就是使用Polygon Offset,当然你也可以使用模板测试,但Polygon Offset的速度会比模板缓存快。

//绘制多边形
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
Draw3D();

glEnable(GL_POLYGON_OFFSET_LINE);
// glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset( factorunits);
//  glPolygonOffset( factorunits)中factorunits的值视情况而定,具体可参考MSDN.
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
Draw3D();

glPolygonOffset( 
0.0f0.0f );
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glDisable( GL_POLYGON_OFFSET_LINE );
//  glDisable( GL_POLYGON_OFFSET_FILL);

阅读更多
文章标签: 测试
个人分类: OpenGL
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

使用Polygon Offset解决Z-fighting和stitching

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭