Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その6 - オブジェクトの移動、回転

SceneKit でジオメトリなどのオブジェクトを変更する場合には、 SCNNode に変更を与えることでそこにぶら下がっているオブジェクトを含め変更される。

移動させてみる

前回作成したテンプレートの func setUpScene() の下に以下の命令を書くと、
角が丸まった立方体が X 軸のプラス方向 (画面で右方向) に移動されて表示する。

let box:SCNGeometry = SCNBox(width: 3, height: 3, length: 3, chamferRadius: 0.4)
let geometryNode = SCNNode(geometry: box)

// 立方体の移動
geometryNode.position = SCNVector3(2, 0, 0)

self.rootNode.addChildNode(geometryNode)

 

SCNNode のノードの位置を表す position のプロパティへ、SCNVector3 のデータタイプを使用して X 軸のプラス方向へ 2 移動させている。

f:id:x67x6fx74x6f:20170602162547p:plain

 

拡大させてみる

geometryNode.scale を追加して縮小。

// 立方体の縮小
geometryNode.scale = SCNVector3(0.5, 0.5, 0.5)

SCNVector3 の値は 1 で等倍であるため、
x, y, z 方向に 0.5 設定することで立方体が半分になる。

例えば x 方向に SCNVector3(0.5, 1, 0.5) にすると縦長の直方体になる

 

f:id:x67x6fx74x6f:20170602162846p:plain

 

回転させてみる

geometryNode.rotation を追加して回転。

// 立方体の回転
geometryNode.rotation = SCNVector4(1, 0, 0, 0.25 * Float.pi)

rotation のプロパティには SCNVector4 を使用。 SCNVector4 は x, y, z, w のラジアンの角度の構成になっており、x, y, z に対して各軸 w を適応され、x軸で45度回転させている。

角度の成分の合成はいないため SCNVector4(1, 1, 0, 0.5 * Float.pi) としても、X軸 45 度回転、Y軸 45 度回転にはならない。

 

f:id:x67x6fx74x6f:20170602162912p:plain

 

オイラー角で回転させてみる

geometryNode.rotation を eulerAngles に変更して回転。

// 立方体のオイラー角で回転
let d = 45 * (Float.pi / 180)
geometryNode.eulerAngles = SCNVector3(d, d, 0)

eulerAngles を使用すると X軸 45 度、Y軸 45 度で回転できる。
こちらも SCNVector3 の中身はラジアン

 

f:id:x67x6fx74x6f:20170602162942p:plain

 

データタイプ

SCNNode で変更を与えるためのデータタイプは以下の4つ。

  • SCNVector3
  • SCNVector4
  • SCNQuaternion
  • SCNMatrix4

 

SCNVector3

3つの Float ベクトル(x,y,z)で構成されたテータ。
主にノードの座標移動、拡大縮小の際に使う。

 

SCNVector4

4つの Float ベクトル(x,y,z,w)で構成されたテータ。 ノードの回転の際に使用する。
SCNVector4 は w の成分を x,y,z に適応する。

 

SCNQuaternion

SCNVector4 同様の構造で xx + yy + zz + ww == 1 を満たすクォータニオンでノードを回転させる。
SCNNode の orientation プロパティで使用する。

 

SCNMatrix4

4 x 4 の Float の行列でノードを変更し、移動、回転、拡大縮小を同時に行う。
SCNNode の transform や worldTransform で使用する

 

 

データタイプ ベクトル 適応動作 SCNNode のプロパティ
SCNVector3 3 移動 / 拡大縮小 / 回転 SCNNode.position / SCNNode.scale / SCNNode.eulerAngles
SCNVector4 4 回転 SCNNode.rotation
SCNQuaternion 4 回転 SCNNode.orientation
SCNMatrix4 4 x 4 の行列 移動 / 回転 / 拡大縮小 SCNNode.transform / SCNNode.worldTransform

 

今回はここまで。