Draw line với ARKit
Bài đăng này đã không được cập nhật trong 6 năm
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ạoARWorldTrackingConfiguration
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ớigeometry
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ả
All rights reserved