簡體   English   中英

iOS OpenGLES上DisparityFloat16像素格式的紋理采樣值

[英]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相比,該值低得多,並且不是線性比例。

這是OpenGLES中的采樣值 在此處輸入圖片說明

這是通過代碼: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM