opengl es 2.0中的深度函数用法

时间:2013-10-06 13:49:34

标签: opengl-es opengl-es-2.0

我尝试在OpenGL ES 2.0中使用glDepthFunc(在带模拟器的PC上),我不明白这种行为。

在init函数中,我只调用这些值:

glClearDepthf( 0.5f );
glClearColor ( 1.0f, 0.0f, 0.0f, 0.0f );

在绘图功能中这段代码:

glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable( GL_DEPTH_TEST );
glDepthFunc(GL_LEQUAL);
glUniform4fv(unifColor, 1, verColor);
glDrawArrays ( GL_TRIANGLE_FAN, 0, 4 );
eglSwapBuffers

我正在画一个绿色方块(屏幕尺寸的一半)。 当绘制的正方形的z值为0.5时。

我希望深度测试将为TRUE,我将看到绘制的绿色方块,但我只看到红色屏幕(用于清晰颜色的颜色)。 当我将清晰深度值定义为1.0时,我会收到预期的行为:红色屏幕上的grren squar,所以我认为根据需要使用深度(所有初始化的深度定义)。

可能是什么问题?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

有些事情可能会出错。可能存在一些精确问题。但是,我有一些猜测:

  

我正在画一个绿色方块(屏幕尺寸的一半)。当绘制的正方形的z值为0.5时。

将某些像(x,y,0.5,1)写入gl_Position导致窗口空间z值为0.5,但是在0.75。 [-1,1]的NDC坐标被映射到depth range(默认为[0,1])。尝试在z = 0处绘制以获得0.5的窗口空间z值(并准备用于其他精度问题)。 所有这些都假设当然没有进一步的转变,特别是没有观点。