1 导入 ARKit
2 授权相机权限
3 创建 sceneView 用来显示场景
4 配置session ARWorldTrackingConfiguration 获取后置相机 ARFaceTrackingConfiguration 获取前置相机 (人脸识别)
sceneView.session.run(configuration)
5 添加3d 物体
func addBox() {
let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
let boxNode = SCNNode()
boxNode.geometry = box
boxNode.position = SCNVector3(0, 0, -0.2)
let scene = SCNScene()
scene.rootNode.addChildNode(boxNode)
sceneView.scene = scene
}
创建一个Box,1 Float = 1 meter。
创建一个node。node表示物体在三维空间中的位置和坐标。node本身没有可见的内容。
给node设置一个形状(Box)。
设置box的位置。这个位置相对于camera的,右边是X正,左边是X负。上面表示Y正,向下表示Y负。向后表示Z正,向前表示Z负。
创建一个scene(SceneKit scene),将box添加到场景中去。
将sceneView的scene设置为显示刚刚创建的场景。
6 点击屏幕添加模型 点击模型删除
@objc func didTap(withGestureRecognizer recognizer: UIGestureRecognizer) {
let tapLocation = recognizer.location(in: sceneView)
let hitTestResults = sceneView.hitTest(tapLocation)
guard let node = hitTestResults.first?.node else {
let hitTestResultsWithFeaturePoints = sceneView.hitTest(tapLocation, types: .featurePoint)
if let hitTestResultWithFeaturePoints = hitTestResultsWithFeaturePoints.first {
let translation = hitTestResultWithFeaturePoints.worldTransform.translation
addBox(x: translation.x, y: translation.y, z: translation.z)
}
return
}
node.removeFromParentNode()
}