关闭

使用Polygon Offset解决Z-fighting和stitching

标签: 测试
3770人阅读 评论(0) 收藏 举报
分类:

     在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);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12532次
    • 积分:193
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:2篇
    • 评论:9条
    文章分类
    文章存档
    最新评论