Opengl 忽略深度测试

Opengl 忽略深度测试,opengl,glsl,depth,Opengl,Glsl,Depth,我正在用C++/OpenGL编写一个小型图形引擎,并设法加载一个模型并在屏幕上进行渲染。但是,网格的某些部分似乎是反转的,就像法线朝向错误的方向一样: 我用于屏幕截图的着色器如下所示(只有片段着色器、顶点着色器应该可以): 所以,基本上,我是在渲染对象到摄影机的距离,以可视化出问题所在。我在不同的文件格式中使用了不同的模型、程序以及预生成的网格,结果总是这样 不知道这是否重要,但我使用的VAO具有一个顶点缓冲区和3个属性(位置、法线、uv) 我已经启用了GL_DEPTH_TEST,我的初始化

我正在用C++/OpenGL编写一个小型图形引擎,并设法加载一个模型并在屏幕上进行渲染。但是,网格的某些部分似乎是反转的,就像法线朝向错误的方向一样:

我用于屏幕截图的着色器如下所示(只有片段着色器、顶点着色器应该可以):

所以,基本上,我是在渲染对象到摄影机的距离,以可视化出问题所在。我在不同的文件格式中使用了不同的模型、程序以及预生成的网格,结果总是这样

不知道这是否重要,但我使用的VAO具有一个顶点缓冲区和3个属性(位置、法线、uv)

我已经启用了GL_DEPTH_TEST,我的初始化例程如下所示:

/* Enable smooth shading */
glShadeModel( GL_SMOOTH);

/* Set the background black */
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

/* Depth buffer setup */
glClearDepth(1.0f);

/* Enables Depth Testing */
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

/* The Type Of Depth Test To Do */
glDepthFunc( GL_LEQUAL );

/* Really Nice Perspective Calculations */
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

我在这里做错什么了吗?

试试换衣服吧

float zbuffer = gl_FragCoord.w * 10;


z深度值在NDC空间中gl_FragCoord的z分量中指定,该分量位于[-1,1]中。然后我们需要将它重新映射到[0,1]区间。这就是我们需要+1和*0.5的原因。

假设我们确实在这里讨论z缓冲区问题(从屏幕截图上很难看出,一个简单的旋转立方体会更清晰),您(a)是否正确地为窗口分配了一个(PixelFormatDescriptor!),以及(b)是否正确地在glClear中清理了每一帧?
float zbuffer = gl_FragCoord.w * 10;
float zbuffer = (gl_FragCoord.z + 1)*0.5;