我尝试在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,所以我认为根据需要使用深度(所有初始化的深度定义)。
可能是什么问题?
感谢您的帮助
答案 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值(并准备用于其他精度问题)。
所有这些都假设当然没有进一步的转变,特别是没有观点。