【问题标题】:Dots on depth image深度图像上的点
【发布时间】:2014-06-22 09:47:58
【问题描述】:

我正在尝试在我的 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上,结果还可以(应该是城市建筑物的脸,每个深度一样),图片是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 设备上的深度缓冲区吗?

【问题讨论】:

    标签: android opengl-es depth-buffer


    【解决方案1】:

    尝试禁用抖动:

    GLES20.glDisable(GLES20.GL_DITHER);
    

    【讨论】:

    • 我没想到抖动会影响深度图... tnx.
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多