mic*_*rus 11 opengl graphics shader rendering glsl
我在OpenGL中遇到了Z-Fighting的主要问题,我花了很长时间才找到解决这个问题的方法.我发现的一些,我理解并不喜欢:
那些我不明白的:
我已经在我的程序中实现了第二个,只需将它放入球的顶点着色器(它与地面z-fight):
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;
Run Code Online (Sandbox Code Playgroud)
它工作了!
谢谢!
小智 2
也许深度缓冲区精度有问题?当使用 16 位缓冲区时,很可能会发生 z-fighting。您可以使用以下方法检查它:
glGetIntegerv( GL_DEPTH_BITS, &depthBits);
Run Code Online (Sandbox Code Playgroud)