EasyAR4.0使用说明(Unity3D)八----稠密空间地图

2,435 阅读2分钟

稀疏空间地图的作用主要是定位,而稠密空间地图主要作用就是重建。利用RGB相机图像对周围环境进行三维稠密重建,得到稠密的点云地图和网格地图,再利用网络地图对虚拟物体实现遮挡和碰撞。

稠密空间地图官方没有提供持久化的方法。

官方给出了稠密空间地图的介绍和使用建议。help.easyar.cn/EasyAR%20Se…

总体说明

稠密空间地图结构很简单,在DenseSpatialMapBuilder游戏对象下,DenseSpatialMapBuilderFrameFilter脚本处理网络地图。

总体说明

  • RenderMesh属性为true时,能够显示网格对虚拟物体的遮挡效果。
  • MeshColor属性是网格地图的颜色,可以设置为具体颜色,也可以设置为完全透明使得看上去像是被实际物体遮挡的效果。

建立使用稠密空间地图

  • 设置场景中的Main Camera的Clear Flags属性为Solid Color。
  • 将EasyAR/Prefabs/Composites目录下的EasyAR_DenseSpatialMapBuilder预制件拖到场景中。

建立使用稠密空间地图

在场景中添加两个切换按钮(Toggle)。

建立使用稠密空间地图

添加一个球体,并给球体添加上刚体(Rigidbody)组件,之后将其拖成预制件(Prefab)。

建立使用稠密空间地图

添加脚本

当点击屏幕的时候,添加一个球体并给它一个向前的力。切换按钮(Toggle)RenderMesh和MeshColor属性。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using easyar;

public class DenseController : MonoBehaviour
{
    public GameObject prefab;
    public DenseSpatialMapBuilderFrameFilter dense;

    void Start()
    {
        dense.MeshColor = Color.gray;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) && Input.touchCount > 0 
        && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
            var launchPoint = Camera.main.transform;
            var ball = Instantiate(prefab, launchPoint.position, launchPoint.rotation);
            var rigid = ball.GetComponent<Rigidbody>();
            rigid.velocity = Vector3.zero;
            rigid.AddForce(ray.direction * 15f + Vector3.up * 5f);
        }
    }

    public void RenderMesh(bool show)
    {
        if (!dense)
        {
            return;
        }
        dense.RenderMesh = show;
    }

    public void TransparentMesh(bool trans)
    {
        if (!dense)
        {
            return;
        }
        if (trans)
        {
            dense.MeshColor = Color.gray;
        }
        else
        {
            dense.MeshColor = Color.clear;
        }
    }
}

运行结果如下:

默认是将网格显示为灰色并且有阻挡效果。

建立使用稠密空间地图

取消MeshColor选项后,网格变成透明的,看上去的效果就是真实物体对虚拟物体进行了阻挡。

建立使用稠密空间地图

取消Render选项后,没有了网格的效果,虚拟物体始终会在真实内容前方。

建立使用稠密空间地图

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