mattak's blog

人生を1ミリ進める

SceneKit Training for OSX by Swift (1): Display Cube

Xcode 6.1 が release されてswiftがMac OSXでも動くようになった。 あんまりチュートリアルもなさそうなので、SceneKit勉強したログを残します。

ベースプロジェクトの作成

Xcode -> New -> Project -> OSX -> Game

f:id:mattaclj:20141026023137p:plain

実行

f:id:mattaclj:20141026023603p:plain

デフォルトだとAirPlaneが表示される。

空シーンを指定する

ViewControllerをまっさらな状態に直す。

import SceneKit
import QuartzCore

class BasicObjectSceneController: NSViewController {

    @IBOutlet weak var baseView: BaseView!

    override func awakeFromNib () {
        let scene = SCNScene()

        self.baseView!.scene = scene
        self.baseView!.allowsCameraControl = true
        self.baseView!.showsStatistics = true
    }
}

実行

f:id:mattaclj:20141026024417p:plain

背景色をつける

SceneKitというかViewの機能ですが、backgroundColorのpropertyにアクセスして変更する。

override func awakeFromNib () {
    let scene = SCNScene()

    self.baseView!.scene = scene
    self.baseView!.allowsCameraControl = true
    self.baseView!.showsStatistics = true
    self.baseView!.backgroundColor = NSColor.blueColor()
}

f:id:mattaclj:20141026024920p:plain

Cubeを表示する

SCNSceneをextendしてカスタムシーンを作ります。

import SceneKit

class BaseObjectScene: SCNScene {
    init(named name: String) {
        super.init()

        let cube = createCube()
        rootNode.addChildNode(cube)
    }

    required init(coder aCoder: NSCoder) {
        super.init(coder: aCoder)
    }

    func createCube() -> SCNNode {
        let cube = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
        let cubeNode = SCNNode(geometry: cube)
        let rotateDegree : CGFloat = CGFloat(M_PI_4) / 2
        cubeNode.transform = SCNMatrix4MakeRotation(1.0, rotateDegree, rotateDegree, 0)
        return cubeNode
    }
}

呼び出しの変更

+        let scene = BaseObjectScene(named: "cube scene")
-        let scene = SCNScene()

実行

f:id:mattaclj:20141026030158p:plain