iOS ARKit

notes of course “iOS Application Development” from RWTH-Aachen in semester winter 19/20, from Simon Voelker and Philipp Wacker

Configuration

  • ARConfiguration defines which camera and tracking algorithms are being used
  • ARSession manages the camera and motion processing
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()

// Run the view's session
sceneView.session.run(configuration)

// Pause the views's session
sceneView.session.pause()

ARSceneView

  • Show statistics
// Show statistics such as fps and timing information
sceneView.showsStatistics = true

-Debug options

sceneView.debugOptions = [ARSCNDebugOptions.showWorldOrigin, ARSCNDebugOptions.showFeaturePoints]
  • ARSCNViewDelegate: Notification as features are detected or remove.

Finding flat surfaces

  • Define what planes to look for
configuration.planeDetection = [.horizontal, .vertical]
  • Implement ARSCNViewDelegate methods to respond to found planes
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor){} 
//_ 忽略外部参数
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor){}
func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor){}

guard let planeAnchor = anchor as? ARPlaneAnchor else {return}
// 从基类向派生类转型
switch planceAnchor.alignment {
  case .horizontal://...
  case .vertical: //...
}

Anchors

  • Different features:
    • ARPlaneAnchor, ARObjectAnchor, ARImageAnchor, ARFaceAnchor
  • Feature specific properties
    • PlanceAnchor: alignment, center, extend, geometry,…
    • ImageAnchor: referenceImage

Image Recognition with ARKit

let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil)!
configuration.detectionImages = referenceImages

//to enable continuous tracking
configuration.maximumNumberOfTrackedImages = 1

Interaction with AR

  • Cast a ray into the scene and find the intersections with the real world
//get the point from which to cast the ray
let touchLocation = sender.location(in: sceneView)
//perform the hit test
let hitTestResult = sceneView.hitTest(touchLocation,types: [.existingPlaneUsingExtent])
  • Array of Result:
    • Type & Anchor
    • Distance & Transforms
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值