depth_clamp和depth_test的执行顺序

时间:2013-01-15 06:48:42

标签: opengl opengl-3 depth-testing

在深度测试之前或深度测试之后是否发生深度钳位? 我正在渲染一个坐标为&gt;的图元。 1.0和<-1.0并使用深度夹紧和深度测试。但是当我启用深度测试时,它不会渲染任何几何体。

这是我的代码:

GLfloat vertices[]=
    {
0.5f,0.5f,0.5f,                                   
-0.5f,0.5f,0.5f,
-0.5f,-0.5f,0.5f,
0.5f,-0.5f,0.5f,

0.5f,-0.5f,-0.5f,
-0.5f,-0.5f,-0.5f,
-0.5f,0.5f,-0.5f,
0.5f,0.5f,-0.5f  
}

for(int i=0;i<24;i++)
    vertices[3*i+2]*=25;

    glEnable(GL_DEPTH_CLAMP);

        // when i comment stmt below, it draws triangle strips
        glEnable(GL_DEPTH_TEST); 
        glClearDepth(15.0f);
        glClearColor (1.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
        glDrawArrays(GL_TRIANGLE_STRIP,0,6);

如何一起使用深度测试和夹紧?

为什么上面的代码在屏幕上没有绘制任何深度测试?

1 个答案:

答案 0 :(得分:4)

来自OpenGL 4.3,17.3.6:

  

如果启用了深度钳位(参见第13.5节),则在比较输入片段的z w 之前,z w 被钳位到[min(n; f)范围内); max(n; f)]


  

我假设默认情况下它是GL_LEQUAL。

这就是为什么当你不知道发生了什么时,你应该发布完整的工作示例。默认深度测试为GL_LESS。 1.0不小于1.0,因此所有0.5深度顶点都无法通过深度测试。

另外,你的循环:

vertices[3*i+2]*=25

这是覆盖内存。你的索引远离数组的末尾,因为它只有24个元素。你可能想要循环8。