
Merhaba arkadaşlar, bu yazımızda Swift ARKit ile nasıl çizim işlemleri yapılır bundan bahsedeceğiz. Bir önceki yazıma buradan ulaşabilirsiniz.
Bir proje oluşturup, daha önceki yazılarımızda yaptığımız işlemleri yapmamız gerekiyor Tasarım kısmında SceneKit ekledikten sonra çizime başlamak için bir buton koyalım ve kullanıcı bu butona bastıktan sonra çizme işlemleri başlasın. Tasarımla işimiz bittikten sonra burayı ViewController’a bağlamamız gerekiyor.
Sonrasında ise ARKit sahnesi her render olduğunda burada işlem yapmamız gerekiyor. Bu render olduğunda yakalayabilmemiz için delegesini bağlamalıyız. Been bunu bir Extension ile sağlıyorum. Ardından ekranın orta noktasının koordinatlarını almam gerekiyor. Bu bilgileri de elde ettikten sonra kullanıcı butona basıyorsa ekrana her render ettiğinde bir nokta koyacağım. Eğer butona basmıyorsa ekranın orta noktasını kullanıcıya göstermek için pembe bir pointer koyacağım. Kullanıcı butona bastığında bu pointer kaybolup çizim başlayacak.
//
// ViewController.swift
// arkit-drawing
//
// Created by Omer Sezer on 9.07.2021.
//
import UIKit
import ARKit
class ViewController: UIViewController {
@IBOutlet weak var sceneView: ARSCNView!
@IBOutlet weak var btnDraw: UIButton!
let configuration = ARWorldTrackingConfiguration()
override func viewDidLoad() {
super.viewDidLoad()
setUI()
}
func setUI() {
// MARK: sceneView
sceneView.debugOptions = [.showWorldOrigin, .showFeaturePoints]
sceneView.showsStatistics = true
sceneView.delegate = self
sceneView.session.run(configuration)
}
}
extension ViewController: ARSCNViewDelegate {
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 currentPositionOfCamera = orientation + location
DispatchQueue.main.async {
if self.btnDraw.isHighlighted {
let nodeSphere = SCNNode(geometry: SCNSphere(radius: 0.02))
nodeSphere.position = currentPositionOfCamera
self.sceneView.scene.rootNode.addChildNode(nodeSphere)
nodeSphere.geometry?.firstMaterial?.diffuse.contents = UIColor.green
} else {
let pointer = SCNNode(geometry: SCNSphere(radius: 0.01))
pointer.name = "pointer"
pointer.position = currentPositionOfCamera
self.sceneView.scene.rootNode.enumerateChildNodes { node, _ in
if node.name == "pointer" {
node.removeFromParentNode()
}
}
self.sceneView.scene.rootNode.addChildNode(pointer)
pointer.geometry?.firstMaterial?.diffuse.contents = UIColor.systemPink
}
}
}
}
func +(left: SCNVector3, right: SCNVector3) -> SCNVector3 {
return SCNVector3(x: left.x + right.x, y: left.y + right.y, z: left.z + right.z)
}
Projenin ekran çıktısı aşağıdaki gibidir.

Projeye buradan ulaşabilirsiniz. Sorularınız olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.
Bir yanıt yazın