【问题标题】:How to plot 3d coordinates in the real world into 2d coordinates of a floor plan in unity?如何将现实世界中的 3d 坐标统一绘制为平面图的 2d 坐标?
【发布时间】:2018-11-08 13:01:04
【问题描述】:

我正在使用 ARkit 开发 AR 应用程序。我想跟踪用户。我可以推送用户的 x、y 和 z 坐标。如何将现实世界中用户位置的 3d 点映射到 2d 平面图.有一定的挑战,因为当应用程序打开时,用户位置(相机位置)是x,y,z =(0,0,0)。用户位置是相机位置。关于这个如何映射到二维平面图。这样当用户四处走动时,他的位置就可以显示在二维平面图中。

我可以添加 AR 模型并找到它们与用户之间的距离。这有助于找到用户的坐标吗?当我转动设备时,坐标会发生变化,因此我们不能依赖用户位置(相机位置)进行绘图.

private Vector3 Campos;
public GameObject chagepos; //Added as a child of camera
private void LateUpdate()
{




//Created a starting point

Campos.x = 246f;//x-Coordinate of the floor plan
Campos.z = 121f;//y-Coordinate of the floor plan
chagepos.transform.position = new Vector3(Campos.x, 0, Campos.z);

Debug.Log(chagepos.transform.position);
}

【问题讨论】:

    标签: c# unity3d arkit


    【解决方案1】:

    如果用户位置表示为 Vector3,那么您只需提取 x 和 z 分量即可获得 Vector2:

    Vector2 floorPlanPosition = new Vector2(playerPosition.x, playerPosition.z);

    您可能需要将 floorPlanPosition 重新投影到平面图对象的本地空间中(因为这可能也是 3d 对象)

    Vector3 worldSpacePositionOfPlayerOnFloorplan = floorPlan.transform.TransformPoint(new Vector3(floorPlanPosition.x, 0, floorPlanPosition.y);

    您可能需要进行其他转换,即如果玩家不在平面图中的 0,0,您可能需要减去偏移位置。

    【讨论】:

    • 用户可以在平面图的任何位置打开应用程序。如果他在现实世界中用户的说点 (-2,3,9) 位置打开应用程序。如何在 2d 中绘制该值。
    • 您需要从当前位置减去起始位置以获得偏移位置,实质上允许您覆盖零点。
    • 我创建了一个起点..我用平面图的坐标覆盖了设备的坐标。但是当我右转和左转时,设备的坐标发生了变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多