zoukankan      html  css  js  c++  java
  • ARKit从入门到精通(5)-ARScnView介绍

    • 转载请注明出处:ARKit从入门到精通(5)-ARScnView介绍

    • AR视图,在第一小节笔者介绍过,ARKit支持3D的AR场景和2D的AR场景,ARSCNView是3D的AR场景视图

    • API介绍

      @interface ARSCNView : SCNView
      
      /**
      代理
       */
      @property (nonatomic, weak, nullable) id<ARSCNViewDelegate> delegate;
      
      /**
      AR会话
       */
      @property (nonatomic, strong) ARSession *session;
      
      /**
      场景
       */
      @property(nonatomic, strong) SCNScene *scene;
      
      /**
      是否自动适应灯光
       */
      @property(nonatomic) BOOL automaticallyUpdatesLighting;
      
      /**
      返回对应节点的锚点,节点是一个3D虚拟物体,它的坐标是虚拟场景中的坐标,而锚点ARAnchor是ARKit中现实世界的坐标。
       */
      - (nullable ARAnchor *)anchorForNode:(SCNNode *)node;
      
      /**
      返回对应锚点的物体
       */
      - (nullable SCNNode *)nodeForAnchor:(ARAnchor *)anchor;
      
      /**
      根据2D坐标点搜索3D模型,这个方法通常用于,当我们在手机屏幕点击某一个点的时候,可以捕捉到这一个点所在的3D模型的位置,至于为什么是一个数组非常好理解。手机屏幕一个是长方形,这是一个二维空间。而相机捕捉到的是一个由这个二维空间射出去的长方体,我们点击屏幕一个点可以理解为在这个长方体的边缘射出一条线,这一条线上可能会有多个3D物体模型
      point:2D坐标点(手机屏幕某一点)
      ARHitTestResultType:捕捉类型  点还是面
      (NSArray<ARHitTestResult *> *):追踪结果数组  详情见本章节ARHitTestResult类介绍
      数组的结果排序是由近到远
       */
      - (NSArray<ARHitTestResult *> *)hitTest:(CGPoint)point types:(ARHitTestResultType)types;
      
      @end
      
      //代理
      #pragma mark - ARSCNViewDelegate
      
      
      //代理的内部实现了SCNSceneRendererDelegate:scenekit代理 和ARSessionObserver:ARSession监听(KVO机制)
      @protocol ARSCNViewDelegate <SCNSceneRendererDelegate, ARSessionObserver>
      @optional
      
      /**
      自定义节点的锚点
       */
      - (nullable SCNNode *)renderer:(id <SCNSceneRenderer>)renderer nodeForAnchor:(ARAnchor *)anchor;
      
      /**
      当添加节点是会调用,我们可以通过这个代理方法得知我们添加一个虚拟物体到AR场景下的锚点(AR现实世界中的坐标)
       */
      - (void)renderer:(id <SCNSceneRenderer>)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
      
      /**
      将要刷新节点
       */
      - (void)renderer:(id <SCNSceneRenderer>)renderer willUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
      
      /**
       已经刷新节点
       */
      - (void)renderer:(id <SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
      
      /**
       移除节点
       */
      - (void)renderer:(id <SCNSceneRenderer>)renderer didRemoveNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
      
      @end
  • 相关阅读:
    CSS居中布局总结
    Jquery的普通事件和on的委托事件
    sass基础用法
    JS中常遇到的浏览器兼容问题和解决方法
    KVC
    关键字 self
    常见的出现内存循环引用的场景有哪些?
    XCODE中的蓝色文件夹与黄色文件夹
    oc 关键字
    uiwebview 兼容性
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/8057610.html
Copyright © 2011-2022 走看看