如何通过使用像素坐标和光线投射将虚拟对象放置在真实对象上。 我在这个问题上坚持了一个月。 T ^ T
基于此处的问题https://forums.hololens.com/discussion/3117/pixel-coordinates-to-world-coordinates
我做类似的事情,但是我尝试在Hololens上进行实时摄影,以检测摄影机上的物体,而不是拍照。通过使用OpenCV,我已经能够获取出现在相机上的对象中心的像素坐标(x,y)。我试图在Unity中使用screenToWorldPoint并使用该矢量进行光线投射,但是虚拟对象并未放置在真实对象上。找到上述网站后,我认为screenToWorldPoint可能无法实现我的目标。
从网站上的答案中,他/她建议通过使用像素坐标,相机的焦距和projectionMatrix从相机COP穿过图像对象绘制光线,但我不知道该怎么做。它。您能否通过详细解释来帮助我,或者给我一些建议,以便在我开始做之前应了解它们?
这是我的一些代码。 X和Y是我从相机获得的像素。相机分辨率为896x504。我将Unity中的相机投影设置为正交。大小为0.14。近平面距离为0.8,远平面距离为1000。
Vector3 PosFar = new Vector3(896-X, Y, Camera.main.farClipPlane);
Vector3 PosNear = new Vector3(896-X, Y, Camera.main.nearClipPlane);
Vector3 PointPosFar = Camera.main.ScreenToWorldPoint(PosFar);
Vector3 PointPosNear = Camera.main.ScreenToWorldPoint(PosNear);
var headPos = PointPosNear;
var gazeDirection = PointPosFar - PointPosNear;
RaycastHit hit;
if (Physics.Raycast(headPos, gazeDirection, out hit, 30.0f, SpatialMappingManager.Instance.LayerMask)){......Generate object....}
答案 0 :(得分:1)
您在使用MRTK吗?如果是,则FocusManager
具有debugDrawPointingRays
的布尔值。如果设置为true,则应该在场景模式下看到射线。也许其实施方式可以帮助您...