在深度测试之前或深度测试之后是否发生深度钳位? 我正在渲染一个坐标为&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);
如何一起使用深度测试和夹紧?
为什么上面的代码在屏幕上没有绘制任何深度测试?
答案 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。