[英]sampler value of texture from DisparityFloat16 pixel format on iOS OpenGLES
我想在我的OpenGLES項目上使用depthDataMap作為iPhoneX真實深度相機的紋理。 已經下載了一些Swift樣本,似乎depthMap可以在Metal上創建並采樣為浮動紋理。 但是在OpenGLES上,從深度緩沖區創建深度紋理的唯一方法是,
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, depthWidth, depthHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, CVPixelBufferGetBaseAddress(depthBuffer));
樣本值與從DisparityFloat16像素類型導出為CIImage的值不同。 與CIImage相比,該值低得多,並且不是線性比例。
這是通過代碼:CIImage * image = [CIImage imageWithCVImageBuffer:depthData.depthDataMap];
有人有同樣的問題嗎?
好吧,您似乎將像素數據類型指定為GL_UNSIGNED_SHORT,請嘗試將其更改為GL_HALF_FLOAT(如果使用DisparityFloat16)或GL_FLOAT(如果使用DisparityFloat32)。
另外,如果要將深度緩沖區顯示為紋理,則應將深度數據轉換為在灰度圖像中有意義的值。 如果將深度緩沖區的值標准化為0到255之間的整數,則您的圖片看起來會好很多。
有關更多信息, 蘋果公司提供了有關此事的示例 。 他們使用Metal,但是主體也可以與OpenGL一起使用。 這是一個非常不錯的教程 ,其中也包含一些示例代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.