Я пытаюсь создать карту глубины из облака точек. Я знаю, что я могу проецировать облако точек на плоскость изображения, однако в сценарии 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
). Вот что говорится в документах для матрицы пар:
Transformation матрица цветной камеры относительно единства мира кадра.
В результате получается белая карта глубины, что означает, что функция возвращается успешно, однако isValid является ложным, что означает, что он не может найти точку точки точки ближайшего пункта после проецирования.
Любые идеи? Также я заметил, что производительность довольно плохая, даже когда моя карта глубины 8x8. Не следует ли обновлять карту глубины, когда доступны новые данные глубины (внутри OnTangoDepthAvailable)?
Редактировать: Мне удалось вернуть функцию успешно, однако теперь она не находит точку точки точки рядом с проекцией. Полученная карта глубины всегда белая. Я распечатываю все аргументы, и все выглядит правильно, поэтому я думаю, что я перехожу в неправильную матрицу.
Как вы получили Tango SDK для Unity3D? Сцена всех сцен разбивается для меня каждые 30 секунд или около того. Есть идеи? –