67 lines
2.1 KiB
Swift
67 lines
2.1 KiB
Swift
|
|
import MetalKit
|
|
import ARKit
|
|
|
|
extension MTKView : RenderDestinationProvider {}
|
|
|
|
class ViewController: UIViewController, MTKViewDelegate, ARSessionDelegate {
|
|
|
|
var session: ARSession!
|
|
var renderer: Renderer!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
session = ARSession()
|
|
session.delegate = self
|
|
if let view = self.view as? MTKView {
|
|
view.device = MTLCreateSystemDefaultDevice()
|
|
view.delegate = self
|
|
renderer = Renderer(session: session, metalDevice: view.device!, renderDestination: view)
|
|
renderer.drawRectResized(size: view.bounds.size)
|
|
}
|
|
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(gestureRecognize:)))
|
|
view.addGestureRecognizer(tapGesture)
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
let configuration = ARWorldTrackingConfiguration()
|
|
configuration.planeDetection = .horizontal
|
|
session.run(configuration)
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
session.pause()
|
|
}
|
|
|
|
@objc
|
|
func handleTap(gestureRecognize: UITapGestureRecognizer) {
|
|
if let currentFrame = session.currentFrame {
|
|
var translation = matrix_identity_float4x4
|
|
translation.columns.3.z = -0.2
|
|
let transform = simd_mul(currentFrame.camera.transform, translation)
|
|
let anchor = ARAnchor(transform: transform)
|
|
session.add(anchor: anchor)
|
|
}
|
|
}
|
|
|
|
func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
|
|
renderer.drawRectResized(size: size)
|
|
}
|
|
|
|
func draw(in view: MTKView) {
|
|
renderer.update()
|
|
}
|
|
|
|
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
|
|
print(anchors)
|
|
}
|
|
|
|
func session(_ session: ARSession, didFailWithError error: Error) {}
|
|
|
|
func sessionWasInterrupted(_ session: ARSession) {}
|
|
|
|
func sessionInterruptionEnded(_ session: ARSession) {}
|
|
}
|