如何将现实世界中的3d坐标统一绘制为平面图的2d坐标?

时间:2018-11-01 09:07:32

标签: c# unity3d arkit

我正在使用ARkit开发AR应用程序。我想跟踪用户。我可以按用户的x,y和z坐标。如何将现实世界中用户位置的3d点映射到2d平面图中。存在某些挑战,因为打开应用程序时,用户位置(相机位置)为x,y,z =(0,0,0)。用户位置是相机位置。 2d平面图。这样,当用户四处移动时,他的位置可以显示在2D平面图中。

我可以添加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);
}

enter image description here

1 个答案:

答案 0 :(得分:0)

如果将用户位置表示为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);

您可能还需要执行其他变换,即,如果播放器不在平面图中,则可能需要减去一些偏移位置。