EasyAR4.0使用說明(Unity3D)(八)----稠密空間地圖

稀疏空間地圖的作用主要是定位,而稠密空間地圖主要作用就是重建。利用RGB相機圖像對周圍環境進行三維稠密重建,得到稠密的點雲地圖和網格地圖,再利用網絡地圖對虛擬物體實現遮擋和碰撞。

稠密空間地圖官方沒有提供持久化的方法。

官方給出了稠密空間地圖的介紹和使用建議。https://help.easyar.cn/EasyAR%20Sense/v4/Guides/EasyAR-Dense-Spatial-Map.html

總體說明

稠密空間地圖結構很簡單,在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選項後,沒有了網格的效果,虛擬物體始終會在真實內容前方。

建立使用稠密空間地圖

視頻版地址:https://www.bilibili.com/video/BV1sf4y1S7sp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章