メタルBox

メタルプレートっぽいBoxを表示するiPhoneアプリのサンプルコードを描いてみます。

import UIKit

import SceneKit

class ViewController: UIViewController, SCNSceneRendererDelegate {

    weak var sceneView : SCNView?

    var count = 0

    

    override func viewDidLoad() {

        super.viewDidLoad()

        setupScene()

        createBox(SCNMatrix4Identity)

        createCamera()

    }

    func setupScene() {

        let sv = SCNView(frame: view.bounds)

        sv.scene = SCNScene()

        sv.backgroundColor = UIColor.blackColor()

        sv.autoenablesDefaultLighting = true

        sv.allowsCameraControl = true

        sv.delegate = self

        view.addSubview(sv)

        

        sceneView = sv

    }

    func createBox(transform : SCNMatrix4) {

        let text = SCNText(string: “BOX”, extrusionDepth: 0.4)

        text.font = UIFont.boldSystemFontOfSize(10)

        

        let m1 = SCNMaterial()

        m1.diffuse.contents = UIColor.darkGrayColor()

        let m2 = SCNMaterial()

        m2.diffuse.contents = UIColor.lightGrayColor()

        

        text.materials = [m1, m1, m2, m2]

        text.chamferRadius = 0.1

        text.flatness = 0.1

        let textNode = SCNNode(geometry: text)

        textNode.pivot = SCNMatrix4MakeTranslation(10, 4, 0)

        textNode.transform = SCNMatrix4Mult(textNode.transform, transform)

        sceneView?.scene?.rootNode.addChildNode(textNode)

    }

    

    func createCamera() {

        let camera = SCNNode()

        camera.camera = SCNCamera()

        camera.position = SCNVector3(x: 0, y: 0, z: 50)

        self.sceneView?.scene?.rootNode.addChildNode(camera)

    }

    func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {

        count++

        

        if (count % 10 == 0) {

            createBox(SCNMatrix4MakeTranslation(0, 0, Float(count / 10) * 0.4))

        }

    }

}