可以让你通过SceneKit来展示AR体验的视图


声明

class ARSCNView : SCNView

概述

ARSCNView类提供了最简单的创建增强现实体验的方法,该体验将虚拟3D内容与摄像头中的真实世界进行融合。当你运行视图提供的ARSession对象时:

  • 视图自动渲染来自设备摄像头的实时视频流作为场景的背景
  • 视图的SceneKit场景的世界坐标系直接回应通过会话的配置项建立的AR世界坐标系
  • 视图自动移动它的SceneKit摄像头来匹配真实世界设备的移动

因为ARKit自动将SceneKit场景匹配到真实世界,所以要放置一个虚拟物体并保持其在真实世界的位置,只需要正确的设置该物体的SceneKit位置即可。参见(Providing 3D Virtual Content with SceneKit)

使用ARAnchor 类来追踪添加到场景中的物体并不是必要的,但是通过实现ARSCNViewDelegate 方法,你可以添加SceneKit内容到ARKit自动检测到的任意锚点。

主题

必要概念

Providing 3D Virtual Content with SceneKit 通过SceneKit来添加3D物体到AR体验中

var session: ARSession AR会话管理视图内容的运动追踪和摄像头图像处理

var scene: SCNScene 展示在视图中的SceneKit场景

AR内容更新响应

var delegate: ARSCNViewDelegate? 提供用来调节视图的AR场景信息和SceneKit内容同步的对象

protocol ARSCNViewDelegate 可以通过实现该方法来调节SceneKit内容与AR会话的自动同步

寻找真实世界表面

func hitTest(CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult] 在捕获到的摄像头图像中搜索与SceneKit视图中的某个点相对应的真实世界物体或者AR锚点

func raycastQuery(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery? 在视图中的一点创建射线投射查询,并与摄像头视图视野中心点对齐。

映射虚拟内容到真实世界中的位置

func anchor(for: SCNNode) -> ARAnchor? 返回与指定SceneKit节点,如果存在的话,相关的AR锚点

func node(for: ARAnchor) -> SCNNode? 返回与指定AR锚点,如果存在的话,相关的SceneKit节点

func unprojectPoint(CGPoint, ontoPlane: simd_float4x4) -> simd_float3? 返回2D视图中的某点到ARKit检测到的3D世界空间中的平面的投影

管理光照

var automaticallyUpdatesLighting: Bool 确定ARKit是否在视图的场景中创建和更新SceneKit的光照的布尔值

调试AR展示

typealias ARSCNDebugOptions 绘制叠加内容来辅助调试SceneKit视图中AR追踪的可选项

管理渲染效果

var rendersMotionBlur: Bool 确定视图是否渲染移动模糊的布尔值

var rendersCameraGrain: Bool 确定SceneKit是否应用图像噪点特征到app的虚拟内容上的布尔值