ScreenToWorldPoint in Unity 与真实摄像机



我正在使用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 位置?

我认为

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

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

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

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

根据文档:

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

所以你的观点是:

   Vector3 point =  ray.origin;

最新更新