iOS TrueDepth 帧到点云
iOS TrueDepth frame to point cloud
我正在尝试从 iOS 中的单个 TrueDepth 帧 (AVDepthData / CVPixelBuffer) 获取 3D 点云。
我看到了官方文档,但是我似乎找不到最后遗漏的部分:Streaming Depth Data from the TrueDepth Camera
这段代码完美地呈现了我感兴趣的点云,但我无法找到如何从中获取以米为单位的世界坐标并将它们存储为 pcd 文件。
有没有办法读出金属深度纹理的所有 3D 点,或者这是错误的方法?
如果是这样,我从哪里开始?
感谢您的帮助!
在着色器函数中vertexShaderPoints
看看下面的内容:
uint2 pos;
pos.y = vertexID / depthTexture.get_width();
pos.x = vertexID % depthTexture.get_width();
// depthDataType is kCVPixelFormatType_DepthFloat16
float depth = depthTexture.read(pos).x * 1000.0f;
float xrw = (pos.x - cameraIntrinsics[2][0]) * depth / cameraIntrinsics[0][0];
float yrw = (pos.y - cameraIntrinsics[2][1]) * depth / cameraIntrinsics[1][1];
float4 xyzw = { xrw, yrw, depth, 1.f };
为您的点云编写器重构此计算,我想您会找到想要的东西。
我正在尝试从 iOS 中的单个 TrueDepth 帧 (AVDepthData / CVPixelBuffer) 获取 3D 点云。 我看到了官方文档,但是我似乎找不到最后遗漏的部分:Streaming Depth Data from the TrueDepth Camera
这段代码完美地呈现了我感兴趣的点云,但我无法找到如何从中获取以米为单位的世界坐标并将它们存储为 pcd 文件。
有没有办法读出金属深度纹理的所有 3D 点,或者这是错误的方法? 如果是这样,我从哪里开始?
感谢您的帮助!
在着色器函数中vertexShaderPoints
看看下面的内容:
uint2 pos;
pos.y = vertexID / depthTexture.get_width();
pos.x = vertexID % depthTexture.get_width();
// depthDataType is kCVPixelFormatType_DepthFloat16
float depth = depthTexture.read(pos).x * 1000.0f;
float xrw = (pos.x - cameraIntrinsics[2][0]) * depth / cameraIntrinsics[0][0];
float yrw = (pos.y - cameraIntrinsics[2][1]) * depth / cameraIntrinsics[1][1];
float4 xyzw = { xrw, yrw, depth, 1.f };
为您的点云编写器重构此计算,我想您会找到想要的东西。