MILLEN BOX

音楽好きの組み込みソフトエンジニアによるプログラミング(主にiOSアプリ開発)の勉強の記録

​ SceneKitについて興味が湧いてきたので少し調べてみた

​ あけましておめでとうございます。
今年もよろしくお願いいたします。

急なのですが今更ながらSceneKitに興味が湧いてきました。
なぜ今更?Unityの方がいいんじゃないの??って声が聞こえてくる。。。

きっかけはコレ
出来上がったものは何かすごそうなのに、コードを見ると、、「ん?何となくわかる!」となり詳しく知りたくなったからです。

lepetit-prince.net

SceneKitについて学べれば、その後にはARKitみたいな面白そうなものもあるし!
今日はとりあえず調べたことを箇条書きにして自分メモを残してみます。

SceneKitメモ

  • SCNView(frame: CGRect)でScene用のViewを作成できる
  • SCNViewは通常のUIViewと共存可能
  • SCNViewにはsceneというプロパティー(SCNScene型)がおり、この子が起点となって3Dの物体を配置される
  • sceneは初期化(SCNScene())してあげないと何故か使えない。理由はよくわからない。
  • SCNViewをself.viewに追加する場合には、通常通りaddSubviewすればOK
  • scene内に置ける3D物体をNodeといいSCNNode(geometry: SCNGeometry?)、若しくはSCNNode(mdlObject: MDLObject)で初期化できる
  • というかsceneにはデフォルトでrootNodeとやらがぶら下げっている
  • SCNNodeはCNNode(geometry: SCNGeometry?)での初期化でOKだと思われる
  • SCNNode(mdlObject: MDLObject)での初期化方法についてはよくわからない。mdlObjectって多分3Dオブジェクトのことだけどあんまりよくわかってない(気にしない)
  • SCNGeometryには以下の12の種類がある。

    • 無限平面(SCNFloor)
    • 立方体(SCNBox)
    • カプセル型(SCNCapsule)
    • 円錐(SCNCone)
    • 円柱(SCNCylinder)
    • 平面(SCNPlane)
    • 三角錐(SCNPyramid)
    • 球(SCNSphere)
    • ドーナツ型(SCNTorus)
    • チューブ型(SCNTube)
    • テキスト(SCNText)
    • パスからの図形(SCNShape)
  • 作成したSCNNodeはrootNodeに対しaddChildNodeすることで追加して見える化できる

  • 作成したSCNNodeは表示する座標(3次元)を指定したり大きさを変更したり形を変形させたりすることができる
  • ここまでではまだ立体のオブジェクトが存在するだけで立体的には見えない。立体的に見せるには、カメラと光源の定義が必要である
  • scene.autoenablesDefaultLightingをtrueにすると光源についてよろしくやってくれる
  • scene.allowsCameraControlをtrueにすると画面を指でグリグリすることでカメラの位置を変えれたり、表示の大きさを変えれたりすることが出来る
  • カメラと光源もノードとして扱われる為、バシッと位置とかを指定することが出来る。(けど詳細は今は知らない。)
  • [おまけ]daeという拡張子の3DのドキュメントファイルからSCNSceneを直接作成する方法もある模様(SCNScene(url: URL, options: ))
    (参考)
    qiita.com

また以下のページからはじまるまとめがかなりわかりやすいと思われます。まだ全然読めてないけど。。。

appleengine.hatenablog.com

今日は以上。