Unity3D Vuforia相机在真实世界中的位置

时间:2016-06-07 00:23:50

标签: c# unity3d vuforia

我正在使用Vuforia和Unity3D开发应用程序。为此,我需要在使用移动电话跟踪图像的同时从图像目标获取真实世界单元中的摄像机位置(x,y,z)。我想知道是否有可能在Vuforia获得这样的位置信息。如果是,任何示例代码都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情。

public class ExampleClass : MonoBehaviour {
public Transform target;
Camera camera;

void Start() {
    camera = GetComponent<Camera>();
}

void Update() {
    Vector3 screenPos = camera.WorldToScreenPoint(target.position);
    Debug.Log("target is " + screenPos.x + " pixels from the left");
}
}

这是做什么的 将世界空间的位置转换为屏幕空间。

屏幕空间以像素为单位定义。屏幕的左下角是(0,0);右上角是(pixelWidth,pixelHeight)。 z位置是相机的世界单位。

可能不是你想要的,但它是一个起点。

编辑: 这将返回世界空间而非本地空间,因此这应该是您想要的

public class ExampleClass : MonoBehaviour {
public GameObject someObject;
public Vector3 thePosition;

void Start() {
    // Instantiate an object to the right of the current object
    thePosition = transform.TransformPoint(Vector3.right * 2);
    Instantiate(someObject, thePosition, someObject.transform.rotation);
}
}

请注意,返回的位置受比例影响。如果要处理方向向量,请使用Transform.TransformDirection。您可以使用Transform.InverseTransformPoint执行相反的转换,从世界到本地空间。

答案 1 :(得分:0)

完成Vuforia相机预制,使顶部物体不移动,它是持有Vuforia AR组件的物体。子对象是一个持有Camera组件的对象,当Vuforia根据标记检测计算其位置时,该组件正在空间中移动。

所以你需要的只是得到子对象及其位置。我不确定,但我认为你可以使用

CameraDevice.Instance.transform.position;

如果没有,那么:

Camera cam = FindObjectOfType<Camera>();
Vector3 worldPos = cam.transform.position;

localPosition返回相对于父级的位置,position返回相对于世界原点的位置。