使用Polygon Offset解决Z-fighting和stitching

原创 2007年09月20日 14:53:00

     在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: glPolygonOffset解决两个面共面

摘自http://www.gamergroup.cn/html/78/n-3078.html当两个面共面时,会出现十分难看的z - fighting 问题,要解决此问题可以使用, Polygon Of...
  • Augusdi
  • Augusdi
  • 2014年04月15日 16:04
  • 3170

Shader Depth Offset [Polygon Offset]

Offset Factor, Units factor Specifies a scale factor that is used to create a variable depth offse...
  • cubesky
  • cubesky
  • 2016年07月11日 15:19
  • 1737

[OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题

阅读目录(Content) 什么是stitching和z-fightingPolygon Offset效果图如何使用Polygon Offset Offset开关用立方体演示stitching用正...
  • cbbbc
  • cbbbc
  • 2017年04月08日 13:57
  • 138

用Polygon Offset解决z-fighting和stitching问题

阅读目录(Content) 什么是stitching和z-fightingPolygon Offset效果图如何使用Polygon Offset Offset开关用立方体演示stitching用正...
  • wang15061955806
  • wang15061955806
  • 2015年10月22日 15:18
  • 624

OpenGL 多边形偏移高亮物体边 Polygon offset

直接绘制一个物体两次分别以GL_FILL, GL_LINE会出现片段重叠现象,线框会断断续续的,这是由于片段深度浮点精度造成深度比较时出问题: 解决办法: 参考OpenGL programm...
  • linian71
  • linian71
  • 2014年12月01日 17:18
  • 1215

OpenGL深度测试与深度缓冲以及Z-fighting的消除

1.深度:是指坐标系中像素点距离摄像机的距离,摄像机可能放在坐标系的任何位置,不能简单地说像素的z越大或越小就是越靠近摄像机。 2.深度缓冲区原理:就是把一个距离观察平面,也就是所谓的近裁剪面的深度...
  • hudfang
  • hudfang
  • 2015年12月15日 16:24
  • 2352

osgFX实现方式解析

osgFX概述     osgFX是一个OpenSceneGraph的附加库,是一个用于实现一致、完备、可重用的特殊效果的构架工具,其效果可以添加到OSG的节点中。它同时还包含了一系列预定义好的特殊...
  • wang15061955806
  • wang15061955806
  • 2016年02月03日 14:53
  • 857

threejs- z-fighting 问题

在threejs中,使用z-buffer来处理模型的可见性,由于z-buffer是有限的,难免会出现两个面对应到同一个深度等级的情况,这种情况可能会造成模型的闪烁,破面,是使用threejs经常会遇到...
  • ruangong1203
  • ruangong1203
  • 2017年09月08日 21:40
  • 938

Z-fighting (深度冲突)

Z-fighting is a phenomenon in 3D rendering that occurs when two or more primitives have similar ...
  • pizi0475
  • pizi0475
  • 2011年08月26日 09:32
  • 3754

z-fighting在unity中的解决方式

如果在画面中,发现有画面闪烁的问题。那么大多数情况下是z-fighting引起的, 解决方案: 1, 在每个场景中,找到那个MainCamera,然后在Inspector上,找到M...
  • TinyHum
  • TinyHum
  • 2012年02月13日 20:17
  • 4220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Polygon Offset解决Z-fighting和stitching
举报原因:
原因补充:

(最多只允许输入30个字)