iOS で SceneKit を試す(Swift 3) その55 - SCNNode の Pivot(原点)を変更する
SCNNode の説明で書き忘れていた Pivot について。
SCNNode には Pivot と呼ばれる原点がある。
例えば球のジオメトリである SCNSphere は Pivot が中心にあり、
移動、回転、拡大縮小を行なった場合、中心から動作が行われる。
Pivot を変更することのメリット
以前、LookAt コンストレイントを使用する際、新しいノードを作成し子のノードに X 軸方向に移動させたジオメトリ設定し、
ノードを回転させることで、X 軸方向移動分を半径として回転させていた。
ノードの Pivot を変更することで、回転の軸となる原点が変わるため、 親のノードを作成しなくても済む。
また、床が Y 軸 0 あり、
キャラクターなどがジオメトリ中央から作成されている場合、
シーン配置時に足の裏の Pivot を変更することで、
キャラクターは Y 軸 0 で地面につくことができる。
Pivot はノードの原点をプログラム上で変更できるため、 このような対応が可能となる。
コードを書いてみる
宇宙船の回転を変更してみる。
Xcode から iOS の Game テンプレートでプロジェクト作成。
GameViewController.swift の let ship 〜 にコードを追加
// retrieve the ship node let ship = scene.rootNode.childNode(withName: "ship", recursively: true)! // --- 追加分 --- ship.pivot = SCNMatrix4MakeTranslation(10.0, 0.0, 0.0)
pivot は SCNMatrix4 の値を渡すようになっており、16個値を設定するのが面倒なので SCNMatrix4MakeTranslation で移動部分だけ渡している。
ビルドするとこんな感じ
今回はここまで