Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么openGL glDepthFunc()不起作用?_Opengl_Buffer_Depth_Zbuffer - Fatal编程技术网

为什么openGL glDepthFunc()不起作用?

为什么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,

我在玩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, 0.1f, 100.0f);
我试图改变“近”和“远”的值,但仍然是一样的。我还试图更改glDepthFunc的参数,但它也帮不了我。 那么,有什么想法吗??非常感谢


这是完全有效的行为,因为您没有使用填充多边形。当您使用
glPolygonMode(…)
时,面剔除仍会以您预期的方式运行,但深度测试不会

深度测试和写入仅适用于光栅化期间的片段,而不适用于剪裁/基本体组装期间的基本体。简而言之,这意味着未填充的任何位置都不会受到基本体深度(例如三角形)的影响。所以,在这个例子中,深度测试只适用于屏幕上两条线重叠的极少数点

如果要防止线框覆盖为通常不可见的三角形绘制线,则需要绘制两次:

通过1
  • 将多边形模式设置为“填充”
  • 禁用颜色写入:
    glcolorsmask(GL\u假、GL\u假、GL\u假、GL\u假)
  • 绘制基本体
  • 通过2
  • 将多边形模式设置为“直线”
  • 启用颜色写入:
    glcolorsmask(GL\u真、GL\u真、GL\u真、GL\u真)
  • 绘制基本体
  • 这将起作用,因为第一个过程使用填充(实体)原语填充深度缓冲区,但不会写入颜色缓冲区(因此所有内容仍然是透明的)。第二遍在每个基本体的边缘绘制线,如果另一个三角形的内部(未填充区域)覆盖了这些线,则这些线将无法通过深度测试

    注意:您应该使用一个深度测试,包括等式(例如,
    GL_LEQAUL
    ),以确保上述行为正常运行。因此,不要使用
    GL\u LESS