ARKit从入门到精通(6)-ARSession介绍

  • 转自:ARKit从入门到精通(6)-ARSession介绍

  • ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部所有的代理方法都是由ARSession来提供的

  • ARSession与ARScnView之间的关系看起来是这样的:

      • ARSession获取相机位置数据主要有两种方式

        • 第一种:push。 实时不断的获取相机位置,由ARSession主动告知用户。通过实现ARSession的代理- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame来获取
        • 第二种:pull。 用户想要时,主动去获取。ARSession的属性currentFrame来获取
    • API介绍
      @interface ARSession : NSObject
      
      /**
       代理
       */
      @property (nonatomic, weak) id <ARSessionDelegate> delegate;
      
      /**
      指定代理执行的线程(主线程不会有延迟,子线程会有延迟),不指定的话默认主线程
       */
      @property (nonatomic, strong, nullable) dispatch_queue_t delegateQueue;
      
      /**
      相机当前的位置(是由会话追踪配置计算出来的)
       */
      @property (nonatomic, copy, nullable, readonly) ARFrame *currentFrame;
      
      /**
       会话追踪配置
       */
      @property (nonatomic, copy, nullable, readonly) ARSessionConfiguration *configuration;
      
      /**
      运行会话(这行代码就是开启AR的关键所在)
       */
      - (void)runWithConfiguration:(ARSessionConfiguration *)configuration NS_SWIFT_UNAVAILABLE("Use run(_:options:)");
      
      /**
      运行会话,只是多了一个参数ARSessionRunOptions:作用就是会话断开重连时的行为。ARSessionRunOptionResetTracking:表示充值追踪  ARSessionRunOptionRemoveExistingAnchors:移除现有锚点
       */
      - (void)runWithConfiguration:(ARSessionConfiguration *)configuration options:(ARSessionRunOptions)options NS_SWIFT_NAME(run(_:options:));
      
      /**
      暂停会话
       */
      - (void)pause;
      
      /**
      添加锚点
       */
      - (void)addAnchor:(ARAnchor *)anchor NS_SWIFT_NAME(add(anchor:));
      
      /**
      移除锚点
       */
      - (void)removeAnchor:(ARAnchor *)anchor NS_SWIFT_NAME(remove(anchor:));
      
      @end
      
      //session代理分类两部分,一个是观察者(KVO) 一个是委托者(代理)
      #pragma mark - ARSessionObserver
      
      
      //session KVO观察者
      @protocol ARSessionObserver <NSObject>
      
      @optional
      
      /**
       session失败
       */
      - (void)session:(ARSession *)session didFailWithError:(NSError *)error;
      
      /**
      相机改变追踪状态
       */
      - (void)session:(ARSession *)session cameraDidChangeTrackingState:(ARCamera *)camera;
      
      /**
       session意外断开(如果开启ARSession之后,APP退到后台就有可能导致会话断开)
       */
      - (void)sessionWasInterrupted:(ARSession *)session;
      
      /**
      session会话断开恢复(短时间退到后台再进入APP会自动恢复)
       */
      - (void)sessionInterruptionEnded:(ARSession *)session;
      
      @end
      
      #pragma mark - ARSessionDelegate
      
      
      
      @protocol ARSessionDelegate <ARSessionObserver>
      
      @optional
      
      /**
       相机当前状态(ARFrame:空间位置,图像帧等)更新
       */
      - (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame;
      
      /**
      添加锚点
       */
      - (void)session:(ARSession *)session didAddAnchors:(NSArray<ARAnchor*>*)anchors;
      
      /**
      刷新锚点
       */
      - (void)session:(ARSession *)session didUpdateAnchors:(NSArray<ARAnchor*>*)anchors;
      
      /**
      移除锚点
       */
      - (void)session:(ARSession *)session didRemoveAnchors:(NSArray<ARAnchor*>*)anchors;
      
      @end

       

转载于:https://www.cnblogs.com/weicyNo-1/p/8057643.html

AR技术是近年来快速发展的前沿科技之一,而ARFoundation作为Unity推出的AR开发框架,无疑是目前最受欢迎的AR开发工具之一。从入门到精通ARFoundation可以说是一条漫长的道路,需要我们逐步掌握基础知识,并不断实践。下面,就让我来介绍一下ARFoundation入门到精通系列讲解吧。 首先,ARFoundation入门课程主要围绕框架的基本概念进行讲解,包括如何在Unity中创建AR项目,如何设置AR模式和跟踪信息配置等。学完这些基础内容后,可以进行第一个AR项目的实现,如实现图像识别功能、添加虚拟物体等。 进一步学习,我们需要了解ARFoundation中的核心概念——平面检测、锚点和会话管理。平面检测是AR中非常重要的一个技术,它可以检测到真实世界中表面的位置并创建虚拟平面。锚点则是指虚拟物体在真实环境中的定位点,通过它可以在不同设备上实现多人协同。而会话管理则是指AR应用程序与AR设备之间的通信和交互,通过会话管理可以实现AR会话的创建、销毁、暂停等操作。 接下来,学习者需要了解ARFoundation中的更高级的技术,例如光影和阴影、物理引擎、碰撞检测和真实感渲染等。这些技术都是AR应用程序中非常重要的一部分,可以为用户带来更加真实的AR体验。 最后,ARFoundation入门到精通系列讲解还需要注重实战操作和项目实践,通过不断尝试和探索,才能更加深入地理解ARFoundation框架。可以参考公开的AR应用程序,例如ARCore、Vuforia、ARKit等,并且在实现自己的AR应用程序时,要注意实现效率、稳定性和用户友好性等方面。 综上所述,ARFoundation入门到精通系列讲解是AR开发者必备的课程之一,通过系统的学习和实践,可以进一步加深对AR技术的理解,实现更加优秀的AR应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值