İçeriğe geç

ARKit’e giriş

Merhabalar bu yazım ile birlikte İOS 11 sürümüyle aramıza katılan yeni API ARKit yani türkçe olarak artırılmış gerçeklik frameworkünü nasıl kullanırız ve uygulama geliştiririz buna giriş yapıp, yazdığım örneği sizinle paylaşacağım.

Teknoloji ilerledikçe sanal gerçeklik ve artırılmış gerçeklik kavramlarını sık sık duymaya başladık. Çoğu teknoloji şirketi bu konular hakkında çalışmalar yürütmekte ve ürünler çıkarmakta. Apple’da boş durmayıp cihazları ve marketini zenginleştirmek adına artırılmış gerçeklik frameworkünü bizlere sundu. Bu framework ile neler yapabiliriz ? diye soracak olursanız. Hayal gücünüzün el verdiği her türlü oyun,uygulamaları gerçek dünyayı zemin olarak kullanarak oluşturabilirsiniz.

Alt yapı olarak ARKit 3D işlemler için SceneKit ve Metal’i desteklemekte. 2D işlemler için ise SpriteKit ile uygulamalar doğrudan ARKit üzerinden gerçekleştirebiliyorsunuz. SceneKit veya SpriteKit çatılarına hakim birisi ARKit ile uygulama yazarken hiç zorlanmayacaktır. Zaten değişen bir durum yok sadece gerçek dünyayı zemin olarak kullanıyorsunuz.

Dezavantaj olarak ise bu uygulamalar sadece yeni cihazlarda yazılıp,kullanılabilinir. (iphone 6s ve sonrası)(ipad pro ve sonrası) bu yüzden geliştiriciler için download sayılarında olumsuz fark yaratabilir.

Sözü fazla uzatmadan ilk örneğimize geçicek olursak. Örneklerimi 3D olarak SceneKit üzerinden vereceğim. ARKit 3D olarak daha keyifli olmakta.

Mantık olarak ARSCNView adlı yeni view üzerinde başlayan uygulama gördüğü kamera görüntüsünü Matris uzayında işlemekte ve kordinatlaştırmakta. Bizde dilediğimiz nesneleri bu uzayda yerleştirebilmekteyiz. Sabit olarak o kordinata yerleşen nesnelere biz cihaz ile birlikte yakınlaşıp uzaklaşma durumlarınıda(CoreMotion) cihazın sensörleri yardımıyla algılayıp işlemleri gerçekleştirmekte.

Aşağıda yazdığım örneği inceleyebilir, direkt olarak destekleyen cihazınızda test edebilirsiniz.

import UIKit
import SceneKit
import ARKit


class ViewController: UIViewController, ARSCNViewDelegate {
    
    @IBOutlet var sceneView: ARSCNView!
   
    override func viewDidLoad() {
        super.viewDidLoad()
        
        sceneView.delegate = self
        self.sceneView.autoenablesDefaultLighting = true
        self.sceneView.automaticallyUpdatesLighting = true
        
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = .horizontal
        sceneView.session.run(configuration)
        
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
        sceneView.session.pause()
    }
    
    var boxNode:SCNNode = {
        
        let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
        let boxNode = SCNNode(geometry: box)
        boxNode.geometry?.firstMaterial?.diffuse.contents = UIColor.green
        
        return boxNode
        
    }()
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        
        if let touch = touches.first {
            
            let location = touch.location(in: sceneView)
            let hitList = sceneView.hitTest(location, types: [ARHitTestResult.ResultType.featurePoint])
            
            if let result = hitList.first {
                
                let hitTransform = SCNMatrix4(result.worldTransform)
                let hitPosition = SCNVector3Make(hitTransform.m41,hitTransform.m42,hitTransform.m43)
                
                let boxx = boxNode
                boxx.position = hitPosition
                
                sceneView.scene.rootNode.addChildNode(boxx)
            }
        }
    }
   
}//

Örnekte dış dunyada ekrana dokunduğunuz bölgelere SCNBox nesnesi eklemekte.

Github link!

 

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca