我在OpenGL中遇到Z-Fighting的主要问题,而且我花了很长时间才找到解决这个问题的方法。我发现的一些,我理解并且不喜欢:
我不理解的那些:
我已经在我的程序中实现了第二个,只需将其放入球的顶点着色器(它与地面进行战斗):
float C = 1.0;
float far = 2000.0;
gl_Position = u_projView * a_position;
gl_Position.z = 2.0*log(gl_Position.w*C + 1.0)/log(far*C + 1.0) - 1.0;
gl_Position.z *= gl_Position.w;
它有效!
谢谢!
答案 0 :(得分:2)
深度缓冲精度可能存在问题吗?使用16位缓冲区时,可能会发生z-fighting。您可以使用以下方式进行检查:
glGetIntegerv( GL_DEPTH_BITS, &depthBits);