【问题标题】:sampler value of texture from DisparityFloat16 pixel format on iOS OpenGLESiOS OpenGLES上DisparityFloat16像素格式的纹理采样器值
【发布时间】:2019-07-26 11:00:52
【问题描述】:

我想在我的 OpenGLES 项目中使用 depthDataMap 作为 iPhoneX 真实深度相机的纹理。已经下载了一些 Swift 示例,似乎可以在 Metal 上创建 depthMap 并将其采样为浮动纹理。但在 OpenGLES 上,从深度缓冲区创建深度纹理的唯一方法是,

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, depthWidth, depthHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, CVPixelBufferGetBaseAddress(depthBuffer));

样本值与从 DisparityFloat16 像素类型导出为 CIImage 的值不同。与 CIImage 相比,该值要低得多,而且不是线性比例。

这是 OpenGLES 中的采样值

这是通过代码:CIImage *image = [CIImage imageWithCVImageBuffer:depthData.depthDataMap];

有人有同样的问题吗?

【问题讨论】:

    标签: ios opengl-es metal truedepth-camera avdepthdata


    【解决方案1】:

    看起来您将像素数据类型指定为 GL_UNSIGNED_SHORT,尝试将其更改为 GL_HALF_FLOAT(如果使用 DisparityFloat16)或 GL_FLOAT(如果使用 DisparityFloat32)。

    另外,如果您想将深度缓冲区显示为纹理,您应该将深度数据转换为在灰度图像中具有某种含义的值。如果您将深度缓冲区值标准化为 0 到 255 之间的整数,您的图片会看起来好多了。

    欲了解更多信息,Apple has examples of this exact thing。他们使用 Metal,但主体也可以与 OpenGL 一起使用。 Here's a really nice tutorial 以及一些可以执行此操作的示例代码。

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 2018-07-21
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多