如何使用OpenGL摆脱模型上的锯齿状边缘?

时间:2015-07-06 21:22:52

标签: python opengl

我正在使用OpenGL渲染3D模型,但是有一个奇怪的图形故障似乎正在发生。每当在较浅的颜色上绘制较暗的颜色时,边缘都是非常锯齿状的。随着相机的移动,这些锯齿状的边缘将会像正弦波那样随着时间的推移而变化和收缩。

这是效果的图像: http://imgur.com/qeEruLT

以下是我使用过的OpenGL设置代码:

glEnable(GL_DEPTH_TEST)
glEnable(GL_NORMALIZE)
glEnable(GL_COLOR_MATERIAL) 
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glDepthFunc(GL_LESS)
glShadeModel(GL_SMOOTH)

# Define tessalation object and callbacks
self.tessellator = gluNewTess()
gluTessCallback(self.tessellator, GLU_TESS_BEGIN, glBegin)
gluTessCallback(self.tessellator, GLU_TESS_END, glEnd)
gluTessCallback(self.tessellator, GLU_TESS_VERTEX, glVertex3dv)

有没有什么好方法可以避免这个问题,所以这些图形错误不会出现?我尝试过启用/禁用某些功能,但我尝试过的功能都没有导致修复,而且我不确定这将属于哪种类型的设置(如果有的话)。

我也尝试过放大图片(10次和100次)。效果并不明显,但仍然很明显,考虑到其他程序目前的工作方式,这并不理想。

1 个答案:

答案 0 :(得分:1)

当您在Z缓冲区中丢失精度时,可能会发生这种情况。与Z轴中可能值的完整范围相比,绘制场景的Z值范围太窄。

尝试将投影矩阵中的Z-near和Z-far调整为更接近场景中出现的Z值,看看它是否有所作为。

更具体地说,你需要避免Z-near等于0.0
更多信息:https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm