Hololens2实现空间描点(本地化)

这篇具有很好参考价值的文章主要介绍了Hololens2实现空间描点(本地化)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        空间锚提供了一种能够将物体保留在特定位置和旋转状态上的方法。这保证了全息对象的稳定性,同时提供了后续在真实世界中保持全息对象位置的能力。MRTK官方给的方法是基于Azure云来实现的,这个云目前个人无法注册,所以暂时只能本地化来实现,本地化其实就是单机版运行,但是其他Hololens设备无法共享这些位置信息,这里可以借助Hololens的门户系统把空间和锚点数据导出来共享给其他Hololens设备使用。

本地空间锚点实现

        这里使用的是 OpenXR ,所以用到的方法是基于 ARAnchorManager,如果是用的老版本Unity,使用的方法是基于WorldAnchor。

在Unity工程中添加空对象,然后添加ArSessionOrigin和ArAnchorManager,如下图:

mrtk 锚点,Unity,unity,游戏引擎,hololens

 下面主要介绍ARAnchorManager相关代码

// 获取锚点存储器
XRAnchorStore _anchorStore = await _arAnchorManager.subsystem.LoadAnchorStoreAsync();

// 获取已经保存过的锚点名称
List<String> names = _anchorStore.PersistedAnchorNames;

// 通过名称加载锚点
// 加载描点之后会调用 _arAnchorManager.anchorsChanged 事件,在事件中可以获取到锚点的位置信息
var anchorId = _anchorStore.LoadAnchor(name);

// 事件demo案例
private void AnchorsChanged(ARAnchorsChangedEventArgs obj)
{
    if (obj.added.Count > 0)
    {
        // 描点对象信息
        var _currentAnchor = a.gameObject
    }
}

// 保存锚点
public void AddAnchor()
{
    // 根据位置、角度加载锚点预制体
    var _currentAnchor = AnchorContent(placingGameObject.transform.position, placingGameObject.transform.rotation, anchorPrefab);

    var anchor = _currentAnchor.GetComponent<ARAnchor>();
        
    // 如果名称存在,删除
    if (_anchorStore.PersistedAnchorNames.Contains(AnchorName))
    {
        _anchorStore.UnpersistAnchor(AnchorName);
    }

    // 保存锚点数据
    _anchorStore.TryPersistAnchor(anchor.trackableId, AnchorName);    
}

锚点本地化保存比较简单,下篇文章介绍如何把本地化数据通过门户系统接口,把空间锚点数据导出出来,给其他设备使用,达到空间位置共享的目的。文章来源地址https://www.toymoban.com/news/detail-562051.html

到了这里,关于Hololens2实现空间描点(本地化)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包