我正试图在iOS中从单个TrueDepth帧(AVDepthData/CVPixelBuffer(获得3D点云。我看到了官方文档,但我似乎找不到最后一个缺失的部分:TrueDepth相机的流式深度数据
这段代码完美地呈现了我感兴趣的点云,但我无法找到如何从中获得以米为单位的世界坐标并将其存储为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 };
为你的点云作者重新计算这个计算,我想你会得到你想要的。