Press ESC to close

ARKit ile cisim oluşturmak ve göstermek

Merhaba arkadaşlar, bu yazımızda ARKit ile nasıl gerçek dünyada kamera üzerinden cisimler gösterebiliriz bundan bahsedeceğim. Daha önceki yazımda ARKit ile nasıl basit bir proje oluşturulur bundan bahsetmiştim. O yazıya da buradan ulaşabilirsiniz.

İlk olarak ekranda bir cisim oluşturmak için Node oluşturmamız gerekiyor. Bu cismin gerçek dünyada nerede duracağını, rengini vs ayarlamamız gerekiyor. Aşağıdaki örnekte bir çok farklı şekilde cisim oluşturulmuştur. Siz de buradan kendi projeniz için gerekli olan şekilde cisim oluşturabilirsiniz.

//
//  ViewController.swift
//  scene-view
//
//  Created by Omer Sezer on 3.07.2021.
//

import UIKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet weak var sceneView: ARSCNView!
    let configuration = ARWorldTrackingConfiguration()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setUI()
    }
    
    func setUI() {
        // MARK: sceneView
        sceneView.debugOptions = [.showFeaturePoints, .showWorldOrigin]
        sceneView.session.run(configuration)
        sceneView.autoenablesDefaultLighting = true
        
        let createdNode = createCustom()
        createdNode.position = SCNVector3(0, 0, -0.2)
        sceneView.scene.rootNode.addChildNode(createdNode)
    }

    func createBox() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.03)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createCapsule() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNCapsule(capRadius: 0.1, height: 0.3)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createCone() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNCone(topRadius: 0, bottomRadius: 0.3, height: 0.3)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createCylinder() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNCylinder(radius: 0.2, height: 0.1)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createSphere() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNSphere(radius: 0.1)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createTube() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNTube(innerRadius: 0.1, outerRadius: 0.3, height: 0.3)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createTorus() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNTorus(ringRadius: 0.3, pipeRadius: 0.1)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createPlane() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNPlane(width: 0.2, height: 0.2)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createPyramid() -> SCNNode {
        let node = SCNNode()
        node.geometry = SCNPyramid(width: 0.1, height: 0.1, length: 0.1)
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }
    
    func createCustom() -> SCNNode {
        let node = SCNNode()
        let path = UIBezierPath()
        path.move(to: CGPoint(x: 0, y: 0))
        path.addLine(to: CGPoint(x: 0, y: 0.02))
        path.addLine(to: CGPoint(x: 0.02, y: 0.03))
        path.addLine(to: CGPoint(x: 0.04, y: 0.02))
        path.addLine(to: CGPoint(x: 0.04, y: 0))
        let shape = SCNShape(path: path, extrusionDepth: 0.02)
        node.geometry = shape
        node.geometry?.firstMaterial?.specular.contents = UIColor.orange
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        return node
    }

}

Kutu

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Kapsül

Detaylı bilgiye buradan ulaşabilirsiniz.

Koni

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Silindir

Daha detaylı bilgiye ulaşabilirsiniz.

Küre

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Tüp

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Simit

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Düzlem

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Piramit

Daha detaylı bilgiye buradan ulaşabilirsiniz.

Özel

Bazen bu cisimlerin yanı sıra farklı özel cisimler de oluşturmak isteyebilirsiniz. Burada biraz hayal gücünüze ve çalışmalarınıza bağlı olarak değişir. Ben küçük bir ev cismi oluşturdum. Kodları yukarıda paylaştım oradan kontrol edebilirsiniz. Ekran görüntüsü ise aşağıdaki gibidir.

 

Sorularını olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir