C++ 启用深度测试时OpenGL ES 2.0对象消失

C++ 启用深度测试时OpenGL ES 2.0对象消失,c++,opengl-es-2.0,egl,C++,Opengl Es 2.0,Egl,编辑:事实证明这是正确的,希望它仍能帮助其他人解决类似问题 在OpenGLES2.0(使用EGL)中设置深度测试管道时,我是否遗漏了一点 关于这一点,我发现了许多问题,但都通过在上下文初始化时正确设置深度缓冲区得到了解决: EGLint egl_attributes[] = { ... EGL_DEPTH_SIZE, 16, ... EGL_NONE }; if (!eglChooseConfig( m_eglDi

编辑:事实证明这是正确的,希望它仍能帮助其他人解决类似问题

在OpenGLES2.0(使用EGL)中设置深度测试管道时,我是否遗漏了一点

关于这一点,我发现了许多问题,但都通过在上下文初始化时正确设置深度缓冲区得到了解决:

EGLint egl_attributes[] = {
        ...
        EGL_DEPTH_SIZE, 16,
        ...
        EGL_NONE };

if (!eglChooseConfig(
        m_eglDisplay, egl_attributes, &m_eglConfig, 1, &numConfigs)) {
    cerr << "Failed to set EGL configuration" << endl;
    return EGL_FALSE;
}
注释出
glEnable(GL\u DEPTH\u TEST)
我有一个场景,但没有我想要的深度测试遮挡

在着色器中,输出
gl_Position
z
组件的视觉效果与预期一致(
z
值在[0,1]范围内):

//顶点着色器
均匀mat4u_矩阵;
属性向量4 a_位置;
浮动v_深度变化;
void main(){
vec4 v_位置=u_矩阵*a_位置;
v_深度=v_位置.z/v_位置.w;
gl_位置=v_位置;
}
//片段着色器
浮动v_深度变化;
void main(){
gl_FragColor=vec4((v_深度<0.0)?1.0:0.0,
v_深度,
(v_深度>1.0)?1.0:0.0,
1.0);
}
所有对象都是纯绿色的阴影,越近越暗,越远越亮,正如预期的那样。不幸的是,一些更亮的物体被画在更近(暗)的物体上


你知道我错过了什么吗?(如果没有其他问题的话,我希望这篇文章总结了其他人一直存在的一些问题)。

看来我没有遗漏任何东西。我有一个流氓多边形(在另一个着色器程序中),当启用深度时,它会遮挡所有东西。以上是正确的设置。

它在接下来的“2天”内不会让我使用
// Set the viewport
glViewport(0, 0, m_display->width(), m_display->height());

// Enable culling and depth testing
glEnable(GL_CULL_FACE);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);

// Clear the color and depth buffers
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Draw elements
m_Program->drawAll();
// Vertex Shader
uniform mat4 u_matrix;
attribute vec4 a_position;
varying float v_depth;
void main() {
    vec4 v_position = u_matrix * a_position;
    v_depth = v_position.z / v_position.w;
    gl_Position = v_position;
}

// Fragment shader
varying float v_depth;
void main() {
    gl_FragColor = vec4((v_depth < 0.0) ? 1.0 : 0.0,
                        v_depth,
                        (v_depth > 1.0) ? 1.0 : 0.0,
                        1.0);
}