Unity中的ScreenToWorldPoint与真实相机

时间:2017-06-17 17:05:32

标签: c# opencv unity3d camera augmented-reality

我正在使用Unity制作AR应用程序。

使用“真实相机”,它使用特征匹配来匹配数据库中已有图片的特定对象。

在功能匹配后,我在下面的实例中存储了一个关键点值:

   KeyPoint key_point;

然后我希望使用key_point获得现实世界的位置。

   //let's assume that 
   //'x' is x-coordinate of key_point
   //'y' is y-coordinate of key_point

   Vector3 p = camera.ScreenToWorldPoint (Vector3 (x, y, camera.nearClipPlane));

我不确定是否可能,因为正在使用“camer.nearClipPlane”的其他人在虚拟3D世界中使用它。

如果不可能,有没有其他方法可以将2d位置改为现实世界中的3d位置(我的意思是真正的相机世界)?

1 个答案:

答案 0 :(得分:1)

我认为您的解决方案存在不考虑相机FOV的问题。因此,您的屏幕点将投影到垂直的近剪裁平面。但这只适用于屏幕中心。

一个简单的解决方案是使用光线对象:

Ray ray = Camera.main.ScreenPointToRay(x,y);

https://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html

根据文件:

生成的光线在世界空间中,从相机的近平面开始并在屏幕上经过位置的(x,y)像素坐标(position.z被忽略) 。“

所以你的意思是:

   Vector3 point =  ray.origin;
相关问题