假设我已经在openGL中实现了一个带有着色的粗糙模型查看器,它呈现了一系列块,这样我就有了这样的东西。
每当我将模型旋转到侧面时,它会在任何具有陡峭视角的表面上产生不必要的锯齿效果。
我很确定这是由于我用来防止模型和线框之间的z-fighting的多边形偏移,但是我无法在openGL中找到阻止这种不良影响的因子/单位参数。
为防止这种情况,glPolygonOffset的因子和单位的最佳值是什么?
实施抗锯齿可以缓解这个问题吗?是表现平凡/重要的权衡?
这可能是一个阴影问题?我应该沿着这条思路尝试解决方案吗?
答案 0 :(得分:3)
这看起来不像Z战斗给我..
如果要绘制平面阴影对象,然后在其上绘制一些GL_LINES,那些线条将产生该效果,因为它们不是抗锯齿的。
为什么不在对象上应用网格纹理?这样你就可以利用OpenGL的纹理过滤。您可以尝试:
答案 1 :(得分:1)
你有可能在陡峭的角度进行z战斗(即当所有点都具有非常相似的z值时),因为
1)您的z缓冲区分辨率太低,即您设置了16位z缓冲区 - 尝试将分辨率更改为32位
2)你的模型非常小,但你的所有点太靠近了。您可以尝试扩展模型。
使用固定偏移量会产生不一致的结果,因为大多数z缓冲区方案偏向于提供更高分辨率,离近近剪辑计划越近,即距离近剪裁平面越近,偏移越小。
Here's a gamedev article更深入地讨论了这个问题
请注意,抗锯齿和更改着色器在这里不太可能有所帮助(除非你做了一些时髦的自定义像素着色器来调制z值,但这似乎对我来说太过分了,虽然我不是像素/片段着色器的专家所以它可能是可行的)