Press ESC to close

ARKit ile Node’un açısını değiştirmek

Merhabalar arkadaşlar, bu yazımızda Swift ARKit ile oluşturduğumuz Node’u nasıl çevireceğimizden bahsedeceğiz. Bu örneğimizi daha önce oluşturduğumuz ev projesi üzerinden yapacağız. O yazıya da buradan ulaşabilirsiniz.

Daha önceki projelerde yaptığımız gibi evi oluşturan node’u ilk olarak sahnemize ekliyoruz. Ardından bu evin Euler Açısını değiştirmemiz gerekiyor. Euler açısı hakkında daha fazla bilgiye buradan ulaşabilirsiniz. Tabi bu açıya derece cinsinden bir değer veremiyoruz. Bu yüzden dereceyi radyana çevirmemiz gerekiyor. Bunun için Int’e bir değişken yazıyoruz. Ardından bu değişken ile Node’un açısını değiştirebiliyoruz.

//
//  ViewController.swift
//  arkit-rotation
//
//  Created by Omer Sezer on 5.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
        
        setHomeNode()
    }
    
    func setHomeNode() {
        let nodeRoof = SCNNode(geometry: SCNPyramid(width: 0.1, height: 0.1, length: 0.1))
        nodeRoof.geometry?.firstMaterial?.diffuse.contents = UIColor.red
        nodeRoof.eulerAngles = SCNVector3(0, 0, 90.degreesToRadians)
        
        let nodeHome = SCNNode(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0))
        nodeHome.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        
        let nodeDoor = SCNNode(geometry: SCNPlane(width: 0.03, height: 0.06))
        nodeDoor.geometry?.firstMaterial?.diffuse.contents = UIColor.green
        
        nodeRoof.position = SCNVector3(-0.1, 0.1, -0.7)
        nodeHome.position = SCNVector3(0, -0.05, 0)
        nodeDoor.position = SCNVector3(0, -0.02, 0.05)
        
        sceneView.scene.rootNode.addChildNode(nodeRoof)
        nodeRoof.addChildNode(nodeHome)
        nodeHome.addChildNode(nodeDoor)
    }
}

extension Int {
    var degreesToRadians: Double { return Double(self) * .pi / 180}
}

Aslında bu işlem bu kadar kolay. Projeye buradan ulaşabilirsiniz. Sorularınız 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