为什么openGL glDepthFunc()不起作用?
我在玩openGL,我试图摆脱蓝色标记的三角形。我使用以下代码:为什么openGL glDepthFunc()不起作用?,opengl,buffer,depth,zbuffer,Opengl,Buffer,Depth,Zbuffer,我在玩openGL,我试图摆脱蓝色标记的三角形。我使用以下代码: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_CULL_FACE); 是的,我用 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 在我的主循环中。我读过的问题可以是投影矩阵。我使用这些值: ProjectionMatrix = glm::perspective(45.5f, 4.0f / 3.0f,
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_CULL_FACE);
是的,我用
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
在我的主循环中。我读过的问题可以是投影矩阵。我使用这些值:
ProjectionMatrix = glm::perspective(45.5f, 4.0f / 3.0f, 0.1f, 100.0f);
我试图改变“近”和“远”的值,但仍然是一样的。我还试图更改glDepthFunc的参数,但它也帮不了我。
那么,有什么想法吗??非常感谢
这是完全有效的行为,因为您没有使用填充多边形。当您使用
glPolygonMode(…)
时,面剔除仍会以您预期的方式运行,但深度测试不会
深度测试和写入仅适用于光栅化期间的片段,而不适用于剪裁/基本体组装期间的基本体。简而言之,这意味着未填充的任何位置都不会受到基本体深度(例如三角形)的影响。所以,在这个例子中,深度测试只适用于屏幕上两条线重叠的极少数点
如果要防止线框覆盖为通常不可见的三角形绘制线,则需要绘制两次:
通过1
glcolorsmask(GL\u假、GL\u假、GL\u假、GL\u假)
glcolorsmask(GL\u真、GL\u真、GL\u真、GL\u真)
GL_LEQAUL
),以确保上述行为正常运行。因此,不要使用GL\u LESS