一.【Session602】Introducing ARKit:Augmented Reality for iOS
二. 官网API
Related Sessions
SceneKit: What’s New
Going Beyond 2D with SpriteKit
session配置
ARSessionConfiguration
if ARWorldTrackingSessionConfiguration.isSupported {
configuration = ARWorldTrackingSessionConfiguration()
} else {
configuration = ARSessionConfiguration()
}
//Run your session
session.run(configuration)
//Pause your session
session.pause()
//Resume your session
session.run(session.configuration)
//Change your configuration
session.run(otherConfiguration)
//Reset tracking
ARFrame
捕获图片
跟踪信息
场景信息
ARAnchor 锚
Tracing
World Tracking
坐标和方向
物理距离
关联开始坐标
//Create a session
let mySession = ARSession()
//Set ourselves as the session delegate
mySession.delegate = self
//Create a world tracking configuration
let configuration = ARWorldTrackingSessionConfiguration()
//Run the session
mySession.run(configuration)
ARCamera
Transform
Tracking state
Camera intrinsics
//计划探测
configuration.planeDetection = .horizontal
ARPlaneAnchor
Transform
Extent
Center
Hit-Testing
Intersect ray with real world
Users scene information
Results sorted by distance
Hit-Test Types
Existing plane using extent
Existing plane
Estimate plane
Feature point
//
let point = CGPoint(x: 0.5, y: 0.5)
let results = frame.hitTest(point, types: [.existingPlane, .estimatedHorizontalPlane])
if let closestResult = results.first {
let anchor = ARAnchor(transform: closestResult.worldTransform)
session.add(anchor: anchor)
}
Light Estimation
configuration.isLightEstimationEnabled = true
SceneKit
SpriteKit
Metal
SceneKit
ARSCNView
Custom Rendering 自定义渲染器
func updateRenderer(_ frame: ARFrame){
drawCameraImage(withPixelBuffer:frame.capturedImage)
let viewMatrix = simd_inverse(frame.came.transform)
let prijectionMatrix = frame.camera.prijectionMatrix
updateCamera(viewMatrix, projectionMatrix)
updateLighting(frame.lightEstimate?.ambientIntensity)
drawGeometry(forAnchors: frame.anchors)
}
Summary
High-level API
Tracking
Scene Understanding
Rendering
ARSession ARSessionConfiguration SceneKit SpriteKit