我正在从点云点生成深度图,并填写我想要查看最接近的匹配颜色框的缺失数据。我能够生成深度图像(我在调用OnDepthAvailable时生成它),并且我看到TangoAR单位示例在调用OnExperimentalTangoImageAvailable时获取颜色框。
这是来自TangoAR统一的例子:
/// <summary>
/// This will be called when a new frame is available from the camera.
///
/// The first scan-line of the color image is reserved for metadata instead of image pixels.
/// </summary>
/// <param name="cameraId">Camera identifier.</param>
public void OnExperimentalTangoImageAvailable(TangoEnums.TangoCameraId cameraId)
{
if (cameraId == TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR)
{
m_screenUpdateTime = VideoOverlayProvider.RenderLatestFrame(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR);
// Rendering the latest frame changes a bunch of OpenGL state. Ensure Unity knows the current OpenGL state.
GL.InvalidateState();
}
}
但是我想要在深度帧之后的帧,而不是最新的帧。
如何尽可能地将两者同步?查看C RBG深度同步示例对我没有帮助。我知道深度和颜色使用相同的相机,并且它不能同时做两个(每4个颜色帧1个深度)。
这个问题有多种解决方案,其中之一就是bashbug建议,缓冲帧并根据最接近的时间戳查找纹理。
我建议的不需要缓冲,它是Unity特定的:
PointCloud
上的网格渲染,并将PointCloud
对象设置为特定的layer。PointCloud
使用this doc中建议的着色器,但请确保关闭color mask,因此点云不会渲染到颜色缓冲区。RenderTexture
和depth format(作为previous doc建议)TangoARCamera
相同的内在(投影矩阵)创建相机,并仅渲染PointCloud
的图层。这台相机将是我们的深度相机(相机只渲染PointCloud
)。TangoARCamera
对象的子对象,没有偏移。这可确保相机具有与ARCamera完全相同的运动(位置和方向)。TangoARCamera
以获取彩色图像。