0
編輯:事實證明這是正確的,希望它仍然可以幫助其他人解決類似問題。OpenGL ES 2.0對象在啓用深度測試時消失
在OpenGL ES 2.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;
}
或通過適當啓用和清除深度緩存,並經過這樣做上下文已被初始化:
// 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();
註釋掉glEnable(GL_DEPTH_TEST)
我有一個場景,但沒有深度測試閉塞我很想有。
在着色器,輸出的gl_Position
視覺作品如預期的那樣z
組分(z
值在範圍[0,1]):
// 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);
}
所有對象都是純綠色的陰影,顏色較深爲如預期的那樣,更接近和更加光明。可悲的是,一些更近(更亮)的對象被繪製在更近(更深的)對象上。
任何想法我失蹤? (如果沒有別的,我希望這會總結其他人已經有的問題)。
它不會讓我再次「2天」 – quornian