稀疏空間地圖的做用主要是定位,而稠密空間地圖主要做用就是重建。利用RGB相機圖像對周圍環境進行三維稠密重建,獲得稠密的點雲地圖和網格地圖,再利用網絡地圖對虛擬物體實現遮擋和碰撞。html
稠密空間地圖官方沒有提供持久化的方法。bash
官方給出了稠密空間地圖的介紹和使用建議。help.easyar.cn/EasyAR%20Se…網絡
稠密空間地圖結構很簡單,在DenseSpatialMapBuilder遊戲對象下,DenseSpatialMapBuilderFrameFilter腳本處理網絡地圖。ide
在場景中添加兩個切換按鈕(Toggle)。ui
添加一個球體,並給球體添加上剛體(Rigidbody)組件,以後將其拖成預製件(Prefab)。spa
添加腳本3d
當點擊屏幕的時候,添加一個球體並給它一個向前的力。切換按鈕(Toggle)RenderMesh和MeshColor屬性。code
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;
}
}
}
複製代碼
運行結果以下:orm
默認是將網格顯示爲灰色而且有阻擋效果。cdn
取消MeshColor選項後,網格變成透明的,看上去的效果就是真實物體對虛擬物體進行了阻擋。
取消Render選項後,沒有了網格的效果,虛擬物體始終會在真實內容前方。