Пример Point Cloud Unity отображает только точки для верхней половины экрана

Мы пытаемся заставить пример Point Cloud Unity работать. Мы попробовали оба примера из git: https://github.com/googlesamples/tango-examples-unity/tree/master/UnityExamples/Assets/TangoSDK/Examples/PointCloud

А также учебник по восприятию глубины: https://developers.google.com/project-tango/apis/unity/unity-prefab-depth

Но мы почему-то получаем точки только в верхней половине экрана. Когда мы быстро наклоняем наше устройство вверх, мы можем видеть больше точек, но как только средство визуализации догоняет их, они снова исчезают.

Мы уверены, что он работал со старыми версиями, но мы можем ошибаться. Мы используем Unity 5.3.3, а Unity SDK - это Gemma (версия 1.31, февраль 2016 г.).

Есть идеи?

введите описание изображения здесь

1 ответ

Все TangoDeltaPoseController и TangoPoseController в Unity предполагают, что рамка камеры Unity была выровнена с рамкой устройства (по умолчанию), поэтому матрица dTuc была постоянной матрицей

m_dTuc = new Matrix4x4();
m_dTuc.SetColumn(0, new Vector4(1.0f, 0.0f, 0.0f, 0.0f));
m_dTuc.SetColumn(1, new Vector4(0.0f, 1.0f, 0.0f, 0.0f));
m_dTuc.SetColumn(2, new Vector4(0.0f, 0.0f, -1.0f, 0.0f));
m_dTuc.SetColumn(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));

но для AR или облаков точек, таких как приложения, наложенное изображение или облако точек были получены камерой цвета / глубины, m_dTuc требуется дополнительное преобразование вместо использования постоянной матрицы по умолчанию

в TangoARPoseController это было

// Get the transformation of device frame with respect to IMU frame.
        pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_IMU;
        pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;
        PoseProvider.GetPoseAtTime(poseData, timestamp, pair);
        Matrix4x4 imuTd = poseData.ToMatrix4x4();

        // Get the transformation of IMU frame with respect to color camera frame.
        pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_IMU;
        pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_CAMERA_COLOR;
        PoseProvider.GetPoseAtTime(poseData, timestamp, pair);
        Matrix4x4 imuTc = poseData.ToMatrix4x4();

        // Get the transform of the Unity Camera frame with respect to the Color Camera frame.
        Matrix4x4 cTuc = new Matrix4x4();
        cTuc.SetColumn(0, new Vector4(1.0f, 0.0f, 0.0f, 0.0f));
        cTuc.SetColumn(1, new Vector4(0.0f, -1.0f, 0.0f, 0.0f));
        cTuc.SetColumn(2, new Vector4(0.0f, 0.0f, 1.0f, 0.0f));
        cTuc.SetColumn(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));

        m_dTuc = Matrix4x4.Inverse(imuTd) * imuTc * cTuc;

Я надеюсь, что это поможет вам.

Другие вопросы по тегам