1

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

在初始化函数中,我只调用定义这些值:

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 正方形,所以我认为根据需要使用深度(所有初始化的深度定义)。

可能是什么问题?

谢谢你的帮助

4

1 回答 1

0

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

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

写类似 (x, y, 0.5, 1) 的东西gl_Position不会导致窗口空间 z 值为 0.5,而是 0.75 [-1,1] 的 NDC 坐标映射到深度范围(默认为 [0,1])。尝试在 z=0 处绘制以获得 0.5 的窗口空间 z 值(并为额外的精度问题做好准备)。当然,所有这些都假设没有进一步的转变,尤其是没有视角。

于 2013-10-06T15:52:28.207 回答