我正在使用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位置(我的意思是真正的相机世界)?
答案 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;