【问题标题】:depth function usage in opengl es 2.0opengl es 2.0 中的深度函数使用
【发布时间】:2013-10-06 13:49:33
【问题描述】:

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

可能是什么问题?

感谢您的帮助

【问题讨论】:

    标签: opengl-es opengl-es-2.0


    【解决方案1】:

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

    我正在绘制一个绿色方块(屏幕大小的一半)。当绘制正方形的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 值(并为额外的精度问题做好准备)。 当然,所有这些都假设没有进一步的转变,尤其是没有视角。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多