使用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);

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

glPolygonOffset的用法

一般的3D显示都通过深度缓冲区来处理遮挡问题,这样的好处就是不管绘制顺序如何,最终总能得到相同的结果。但是深度缓冲区的精度是有限的(一般是每个像素采用16bit或者24bit来表示深度),如果两次绘制...

OpenGL: glPolygonOffset解决两个面共面

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

Shader Depth Offset [Polygon Offset]

Offset Factor, Units factor Specifies a scale factor that is used to create a variable depth offse...

Z-fighting (深度冲突)

Z-fighting is a phenomenon in 3D rendering that occurs when two or more primitives have similar ...

使用Z-Bias解决Z-Fighting问题的替代方案 Alternatives to Using Z-Bias to Fix Z-Fighting Issues

Submit New Article http://software.intel.com/en-us/articles/alternatives-to-using-z-bias-to-fix...

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

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

[OpenGL] shadow mapping(实时阴影映射)

source:原文地址,提供了源代码下载        1978年,Lance Williams在其发表的论文《Casting curved shadows on curved surfac...

z-fighting在unity中的解决方式

如果在画面中,发现有画面闪烁的问题。那么大多数情况下是z-fighting引起的, 解决方案: 1, 在每个场景中,找到那个MainCamera,然后在Inspector上,找到M...

OpenGL--阴影

理论基础 阴影:就是我们所说的影子,其实现原理其实就是把场景渲染了两次,第一次是把相机放到光源位置渲染场景 ,然后存储渲染的深度信息到一张纹理上,即阴影图(只关心深度信息,所以此时可以关闭光照和纹理...

OpenGL: 阴影算法

图中有两条光线,一条沿视角方向,另一条偏右采用阴影体算法,实现了多光源,多物体的阴影。这个算法没有采用顶点shader,所以速度比较慢,学习算法用,在实际工程中用效率就太低了。。。算法还有个缺陷,只对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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