我正在使用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次)。效果并不明显,但仍然很明显,考虑到其他程序目前的工作方式,这并不理想。
答案 0 :(得分:1)
当您在Z缓冲区中丢失精度时,可能会发生这种情况。与Z轴中可能值的完整范围相比,绘制场景的Z值范围太窄。
尝试将投影矩阵中的Z-near和Z-far调整为更接近场景中出现的Z值,看看它是否有所作为。
更具体地说,你需要避免Z-near等于0.0
更多信息:https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm