我们正在努力让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年2月)。
有什么想法吗?
答案 0 :(得分:0)
Unity中的TangoDeltaPoseController和TangoPoseController都假设Unity Camera Frame与Device(默认)Frame对齐,所以矩阵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;
我希望这会对你有所帮助。