0
我試圖在我的Android設備上獲取深度緩衝區(nexus 7)。 因爲我無法附加深度緩衝區(opengl ES),所以我嘗試使用着色器來對顏色緩衝區的G和B分量中的深度值進行編碼。 着色器:深度圖像上的點
static const char gVertexShader[] =
"varying vec2 texcoord; \n"
"void main() \n"
"{ \n"
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; \n"
" texcoord = gl_MultiTexCoord0.xy/gl_MultiTexCoord0.w; \n"
"} \n";
static const char gFragmentShader[] =
#ifdef __ANDROID__
"precision highp float; \n"
#endif
"uniform sampler2D modelTexture; \n"
"varying vec2 texcoord; \n"
"void main() \n"
"{ \n"
" gl_FragColor.r = texture2D(modelTexture, texcoord).r; \n"
" float depth = gl_FragCoord.z; \n"
" gl_FragColor.g = depth; \n"
" gl_FragColor.b = depth; \n"
" gl_FragColor.a = 1.0; \n"
"} \n";
在PC上,結果是OK(它應該是城市建築面,相同的深度各)圖像是G通道:
但在Android,這個結果上有 「點」,意思接近像素的紋理:
Android的配置是:
EGL_BUFFER_SIZE: 32
EGL_ALPHA_SIZE: 8
EGL_BLUE_SIZE: 8
EGL_GREEN_SIZE: 8
EGL_RED_SIZE: 8
EGL_DEPTH_SIZE: 16
EGL_STENCIL_SIZE: 0
EGL_CONFIG_CAVEAT: 12344
EGL_CONFIG_ID: 25
EGL_LEVEL: 0
EGL_MAX_PBUFFER_HEIGHT: 2048
EGL_MAX_PBUFFER_PIXELS: 4194304
EGL_MAX_PBUFFER_WIDTH: 2048
EGL_NATIVE_RENDERABLE: 0
EGL_NATIVE_VISUAL_ID: 1
EGL_NATIVE_VISUAL_TYPE: -1
EGL_SAMPLES: 0
EGL_SAMPLE_BUFFERS: 0
EGL_SURFACE_TYPE: 3175
EGL_TRANSPARENT_TYPE: 12344
EGL_TRANSPARENT_RED_VALUE: 0
EGL_TRANSPARENT_GREEN_VALUE: 0
EGL_TRANSPARENT_BLUE_VALUE: 0
EGL_BIND_TO_TEXTURE_RGB: 0
EGL_BIND_TO_TEXTURE_RGBA: 0
EGL_MIN_SWAP_INTERVAL: 1
EGL_MAX_SWAP_INTERVAL: 1
EGL_LUMINANCE_SIZE: 0
EGL_ALPHA_MASK_SIZE: 8
EGL_COLOR_BUFFER_TYPE: 12430
EGL_RENDERABLE_TYPE: 4
EGL_CONFORMANT: 4
這可能是什麼原因造成的? 是否有另一種方式來讀取Android設備上的深度緩衝區?
我沒想到的是抖動會影響深度地圖... TNX。 – eranb