EasyAR4.1平面识别

703 阅读1分钟

EasyAR4.1发布以后,官方人员说增加了平面识别的功能,放在了运动跟踪里面。

重新下载了官方示例,安装之后看了下,点击Motion Tracking运动跟踪以后,效果如下。

运行效果

EasyAR4.1平面跟踪

会多出一个黑色的框在平面上,但是,示例中黑色框只会有一个。点击黑色框以后,会方式一个方块。方块可以在黑框范围内拖动。

一旦放置了方块,就不会在其他位置有黑框了,必须点击按钮“Unlock Plane”之后,才能在新的位置有黑框。

场景设置

EasyAR4.1平面跟踪场景

场景设置和原有的运动跟踪没区别,确实如官方所说是在运动跟踪的功能中增加了平面识别。

关键代码

private void Update()
{
    ...
    //如果VIOCamera存在
    if (vioCamera.Device != null && vioCamera.Device.Type() == typeof(MotionTrackerCameraDevice))
    {
        //按钮处于解锁状态
        if (!UnlockPlaneButton.interactable)
        {
            //判断黑框是否在当前摄像机的视野中
            var viewportPoint = Camera.main.WorldToViewportPoint(Plane.transform.position);
            if (!Plane.activeSelf || viewportPoint.x < 0 || viewportPoint.x > 1 || viewportPoint.y < 0 || viewportPoint.y > 1)
            {
                //通过摄像机检测视野中的平面
                var viewPoint = new Vector2(0.5f, 0.333f);
                var points = vioCamera.HitTestAgainstHorizontalPlane(viewPoint);//关键方法
                if (points.Count > 0)
                {
                    //将黑框移动到对应位置
                    Plane.SetActive(true);
                    Plane.transform.position = points[0];
                    Plane.transform.localScale = Vector3.one * (Session.Assembly.CameraRoot.position - points[0]).magnitude;
                }
            }
        }
        ...
    }
}

EasyAR4.1提供的平面识别的示例能够识别水平平面,不能识别垂直平面。效果嘛,至少示例做的没ARCore的好。

视频版地址:www.bilibili.com/video/BV1Yp…