Draw line với ARKit
Overview ARKit Thực tế tăng cường (AR) mô tả trải nghiệm người dùng thêm các yếu tố 2D(ARSKView) hoặc 3D(ARSCNView) vào chế độ xem trực tiếp từ máy ảnh của thiết bị theo cách khiến các yếu tố đó xuất hiện để sống trong thế giới thực. ARKit kết hợp theo dõi chuyển động thiết bị, chụp cảnh quay ...
Overview ARKit
Thực tế tăng cường (AR) mô tả trải nghiệm người dùng thêm các yếu tố 2D(ARSKView) hoặc 3D(ARSCNView) vào chế độ xem trực tiếp từ máy ảnh của thiết bị theo cách khiến các yếu tố đó xuất hiện để sống trong thế giới thực. ARKit kết hợp theo dõi chuyển động thiết bị, chụp cảnh quay camera, xử lý cảnh nâng cao và tiện ích hiển thị để đơn giản hóa nhiệm vụ xây dựng trải nghiệm AR. Bạn có thể sử dụng các công nghệ này để tạo nhiều loại trải nghiệm AR bằng cách sử dụng camera sau hoặc camera trước của thiết bị iOS.
ARSCNView
Là view hiển thị AR(augmented reality) của camera bằng nội dung 3D.
ARSKView
Là view hiển thị AR(augmented reality) của camera bằng nội dung 2D.
ARWorldTrackingConfiguration
Cấu hình sử dụng máy ảnh mặt sau, theo dõi hướng và vị trí của thiết bị và phát hiện các bề mặt trong thế giới thực cũng như các hình ảnh hoặc đối tượng đã biết.
Draw với ARKit
Đầu tiên trong ViewController tạo ARSCNView
@IBOutlet var sceneView: ARSCNView! @IBOutlet weak var drawButton: UIButton!
Trong viewDidLoad chúng ta set delegate cho ARSCNView
override func viewDidLoad() { super.viewDidLoad() // Set the view's delegate sceneView.delegate = self // Show statistics such as fps and timing information sceneView.showsStatistics = true }
Trong viewWillAppear tạo ARWorldTrackingConfiguration và run nó trong ARSCNView
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Create a session configuration let configuration = ARWorldTrackingConfiguration() // Run the view's session sceneView.session.run(configuration) }
Trong ARSCNViewDelegate draw line với geometry là SCNSphere
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) { guard let pointOfView = sceneView.pointOfView else { return } let transform = pointOfView.transform let orientation = SCNVector3(-transform.m31, -transform.m32, -transform.m33) let location = SCNVector3(transform.m41, transform.m42, transform.m43) let cameraPosition = orientation + location //Draw if self.drawButton.isHighlighted { let node = SCNNode(geometry: SCNSphere(radius: 0.03)) node.geometry?.firstMaterial?.diffuse.contents = UIColor.purple node.position = cameraPosition self.sceneView.scene.rootNode.addChildNode(node) }
Kết quả