Пример 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 г.).

Любые идеи?

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


person Timothy    schedule 24.02.2016    source источник
comment
Молодцы, получили комплект   -  person Fattie    schedule 24.02.2016
comment
Отрисовывается ли облако точек с использованием системы частиц Unity? Я использовал его для рендеринга затонувших, а затем сканированных в 3D-кораблях, и всякий раз, когда источник системы частиц выходил из пирамиды, вся система частиц больше не рендерилась, даже если некоторые частицы находились в пирамиде. Решение, которое у меня было тогда, заключалось в том, чтобы разделить систему частиц на N других и повторно центрировать каждую систему по ее центроиду. Проблема осталась, но была сведена к минимуму по мере роста N.   -  person RCYR    schedule 24.02.2016
comment
Привет, Тимоти, это потому, что внешние элементы устройства не применяются к deltaPoseController в сцене. Камера глубины имеет поворот на ~ 13 градусов, немного вверх. Тем не менее, положение устройства сообщается без поворота на 13 градусов. Думаю, это нужно исправить. Но не могли бы вы сообщить мне, в чем ваш сценарий использования? Я, вероятно, смогу помочь вам решить проблему напрямую, а не помочь вам исправить контроллер дельта-позы.   -  person xuguo    schedule 01.03.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;

Надеюсь, это вам поможет.

person Henry Ma    schedule 27.03.2016