【发布时间】:2016-07-06 03:51:31
【问题描述】:
我正在尝试从点云生成深度图。我知道我可以将点云投影到图像平面,但是 TangoSupport 脚本中已经有一个函数 (ScreenCoordinateToWorldNearestNeighbor) 可以在给定屏幕坐标的情况下找到 XYZ 点。
我无法使此支持功能正常工作,而且我的一个或多个输入似乎无效。我正在 OnTangoDepthAvailable 事件中更新我的深度图纹理。
public void OnTangoDepthAvailable(TangoUnityDepth tangoDepth)
{
_depthAvailable = true;
Matrix4x4 ccWorld = _Camera.transform.localToWorldMatrix;
bool isValid = false;
Vector3 colorCameraPoint = new Vector3();
for (int i = 0; i < _depthMapSize; i++)
{
for (int j = 0; j < _depthMapSize; j++)
{
if (TangoSupport.ScreenCoordinateToWorldNearestNeighbor(
_PointCloud.m_points, _PointCloud.m_pointsCount,
tangoDepth.m_timestamp,
_ccIntrinsics,
ref ccWorld,
new Vector2(i / (float)_depthMapSize, j / (float)_depthMapSize),
out colorCameraPoint, out isValid) == Common.ErrorType.TANGO_INVALID)
{
_depthTexture.SetPixel(i, j, Color.red);
continue;
}
if (isValid)
{
//_depthTexture.SetPixel(i, j, new Color(colorCameraPoint.z, colorCameraPoint.z, colorCameraPoint.z));
_depthTexture.SetPixel(i, j,
new Color(0,UnityEngine.Random.value,0));
}
else
{
_depthTexture.SetPixel(i, j, Color.white);
}
}
}
_depthTexture.Apply();
_DepthMapQuad.material.mainTexture = _depthTexture;
}
如果我不得不猜测,我会说我传入了错误的矩阵 (ccWorld)。这是矩阵参数的文档中所说的:
彩色相机相对于 Unity 的变换矩阵 世界框架。
结果是一个白色的深度图,表示函数返回成功,但isValid为false表示投影后找不到附近的点云点。
有什么想法吗?我还注意到性能很差,即使我的深度图是 8x8。当有新的深度数据可用时(在 OnTangoDepthAvailable 内),我是否不应该更新深度图?
编辑: 我能够使函数成功返回,但是现在它在投影后找不到附近的点云点。生成的深度图始终为白色。我正在打印所有参数,而且看起来都是正确的,所以我认为我传入了错误的矩阵。
【问题讨论】:
-
您是如何让 Tango SDK 为 Unity3D 工作的?示例场景每 30 秒左右都会为我崩溃一次。有什么想法吗?
标签: android unity3d google-project-tango point-clouds