如何在Unity3D中导出Point Cloud Data(Project Tango)?

时间:2017-07-20 01:26:22

标签: unity3d google-project-tango

如主题所示,如何在Unity3D创建的apk中导出Point Cloud Data?我如何使用这些数据在Unity3D中创建3D网格或模型?

2 个答案:

答案 0 :(得分:1)

在Unity3D中使用Tango创建3D网格或模型

Unity Tango SDK中有一个示例场景,可让您直接在apk应用中获取并导出彩色网格。看看Assets \ TangoSDK \ Examples \ Scenes \ ExperimentalMeshBuilderWithColor.unity。

在apk中导出点云数据

我认为SDK中没有直接执行此操作的功能,但请查看以下脚本:Assets \ TangoSDK \ Examples \ Common \ Scripts \ TangoDynamicMesh.cs,更准确地说是函数{{1将TangoDynamicMesh导出为OBJ文件格式。

您可以创建一个类似的脚本,从TangoPointCloud.m_mesh而不是TangoDynamicMesh获取值,以将您的pointcloud导出为OBJ文件。

还要看看这个问题:How do I export Point Cloud Data (Project Tango)

从Unity中的3D点创建网格

从3D点创建网格并不容易,并且在Unity中没有直接的方法。从导出的OBJ点云,您可以使用Point Cloud LibraryMeshlab等外部工具。

答案 1 :(得分:0)

您可以获得此example的点云数据。在指南中设置完所有内容后,您可以轻松获得所有点的坐标:

private Vector3[] GetPointCloudData()
{
    TangoPointCloud pointCloud = FindObjectOfType<TangoPointCloud>();
    return pointCloud.m_points;
}

但是,通过此功能,您只能获得设备屏幕上当前可见的点数。

将它们发送到服务器后,创建包含网格和绘制点的游戏对象:

public void CreateMesh(Vector3[] points)
{
    Util.Debug("Drawing...");
    mesh.Clear();

    int[] indecies = new int[points.Length];
    Color[] colors = new Color[points.Length];
    for (int i = 0; i < points.Length; ++i)
    {
        indecies[i] = i;
        colors[i] = Color.green;
    }

    mesh.vertices = points;
    mesh.colors = colors;
    mesh.SetIndices(indecies, MeshTopology.Points, 0);

}

请注意,颜色是硬编码的,我无法从pointcloud数据中获取颜色。

对于提取网格,您可以按照此example