Swift3
コードからジオメトリをつくろうと思う。 ほぼ、自前でジオメトリを描画することはないと思われるので今回はさわりだけ。 テンプレートにあった宇宙船やビルトインのジオメトリ。 これらはオブジェクトファイルの読み込み、Scene Editor からのドラッグ&ドロ…
SCNText はフォントからジオメトリを作成するが、こちらは UIBezierPath で作成するジオメトリ。 設定値は SCNText 同様にイニシャライズや個別でパスと押出し設定を行う。 面取り(chamfer) も SCNText と同様の設定を行うことができる。 Scene Editor で UI…
フォントから作成する 3D テキストのジオメトリ。 NSString もしくは NSAttributedString で使用したいテキストを設定する。 ベースラインではなく、ディセンダ(下の空き)を含めるため、 原点においても文字は左下は原点にこないので注意。 また、文字の奥…
チューブ型のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Tube を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Tube の項目で設定値が変更できる Dimensions Inner rad…
ドーナツ型のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Torus を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Torus の項目で設定値が変更できる Dimensions Ring Ra…
球のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Sphere か GeoSphere を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Sphere の項目で設定値が変更できる Sphere と G…
三角錐のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Pyramid を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Pyramid の項目で設定値が変更できる Size 幅、高さ、奥…
奥行き 0 の縦状態がデフォルトの平面のジオメトリで、角を丸くすることができる。 このビルトインジオメトリは、デフォルトでマテリアルがポリゴンが両面描画される。 裏面が必要ない場合は Material Inspector(Command + Option + 5)> Setting > Double …
円柱のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Cylinder を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Cylinder の項目で設定値が変更できる Dimensions Radius …
円錐のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Cone を Scene Editor にドラッグ&ドロップして、Attribute Inspector を開く(Command + Option + 4) 1番上の Cone の項目で設定値が変更できる Dimensions Top radius 上底…
円柱の上下に半球をつけたカプセル型のジオメトリ。 Scene Editor でのパラメーター オブジェクトライブラリの Capsule を Scene Editor にドラッグ&ドロップして、Attribute Inspector を開く(Command + Option + 4) 1番上の Capsule の項目で設定値が変…
立方体のジオメトリ。角を丸くすることができる。 Scene Editor でのパラメーター オブジェクトライブラリの Box を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Box の項目で設定値が変更できる …
Y軸 0、XZ 軸が無限の大きさを持つ平面。 初期値では原点に配置される。 Scene Editor でのパラメーター オブジェクトライブラリの Floor を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4) 1番上の Floor の…
SceneKit で言うジオメトリは平面や立体の物体を指し、 プログラムで形を作り、法線やテクスチャ情報、マテリアルなどその他の情報を付加して物体を表示している。 SceneKit でのジオメトリの使用方法 使用方法は以下のもの。 ビルトインのジオメトリを使用…
3DCG ではオブジェクトの動きなどに制約を与えるコンストレイントというものがある。 SceneKit では SCNConstraint というスーパークラスがあり、サブクラスで機能が割り当てられている。 一応、SCNTransformConstraint というクラスが用意されており、カス…
前回 Scene Editor で World 座標での設定箇所にふれた。 今回はコード上から行ってみる。 その前に 4x4 の行列 SCNMatrix4 での移動方法 SCNMatrix4 は 4x4 になっているため、設定できる値は16個ある。 以下のようにし、移動させる場合は m41, m42, m43 の…
今回はノードに関する属性を設定できる Node Inspector 部分をもうちょっと詳しく見てみる。 Node Inspector の中身は何? Node Inspector は名前の通り SCNNode で設定できる値になっているが、 オブジェクトの中心軸を決める pivot など、設定できない値が…
今回は、アニメーションで使用していた SCNAction を Scene Editor の Action Editor で編集を行う。 ちなみに SpriteKit と異なり SceneKit の Action Editor からではアニメーション用のファイルをつくることができず、 コードから使いまわすことができな…
今回は、以前に作成した Scene Editor のサンプルを元に球をたくさんを置いたもので試す。 Scene Editor のサンプル では ViewController.swift で SCNView の背景色を設定しているが必要ないので以下のものを消す。 scnView.backgroundColor = UIColor.blac…
ひとまず、以前作成した scn ファイルを元に Utilities エリア を軽く確認してみる。 Utilities エリアには Source Editor や Interface Builder と同様に 上部にインスペクタと下部にライブラリと分けられている。 インスペクタ Utilities には7つのタブが…
ざっくり Scene Editor の UI や操作周りご紹介。 Xcode 9 で若干設定項目が増えるけど。 SceneKit の Scene Editor で扱えるものは dae、obj、abc(alembic)などのオブジェクトファイルと パーティクル専用の scnp とシーンファイルである scn。 scn での…
今まではコードから SCNScene のクラスを使用してシーンを作成していたが、SceneKit にはもう1つ作成方法があり今回はそちらのご紹介。 Xcode に Scene Editor というツールがあり、Unity のエディタのようなもの。 オブジェクトを視覚的置いたり、アニメー…
前回のサンプルでは重大なミスをしており、 タップする度にルートノードに新規の球体のノードが追加されている。 そのためドローコールがタップ毎に増えており、 簡素なジオメトリとはいえ、あまり端末に優しくない。 修正してみる SCNNode には clone() と…
Unity などと同様に、SceneKit も物理アニメーションが行われるオブジェクトを設定し、物理アニメーションの影響を受けるが画面内に固定されたものを設定するだけ。 落下物を設定 GameScene.swift の func setUpScene() の中に 以下のコードを書くと球 Y 軸 …
Core Animation を使用するより SCNAction を使った方が便利なのでこちらを使用。 SpriteKit の SKAction の3次元版なので使用方法はほぼ同じ。 SCNAction での SCNVector3 と SCNVector4 SCNVector3 は x, y, z の3つの値を持ち値の方向に移動または回転さ…
SceneKit のアニメーション SceneKit のアニメーションには大きく分けて以下の 2 種類があり、 今回の紹介するものは後者のもの。 物理アニメーションやパーティクルなど SceneKit が自動で動きを計算するもの アプリ開発者が任意で動きを設定するもの アニ…
SceneKit でジオメトリなどのオブジェクトを変更する場合には、 SCNNode に変更を与えることでそこにぶら下がっているオブジェクトを含め変更される。 移動させてみる 前回作成したテンプレートの func setUpScene() の下に以下の命令を書くと、 角が丸まっ…
今後、コードサンプルで使用するためのものを作成する。 シーングラフのルートノードに追加するもの。 オムニライト (配置した位置から全ての方向を照らす光源) アンビエントライト (位置に関係なく画面全体を照らす環境光。ジオメトリに陰は落ちない) カメ…
SceneKit の要 Scene Graph SceneKit はシーングラフというツリー状の構造で画面構成をつくり3DCGを表示してい る。 シーングラフの起点は SCNScene が起点となり、ルートノードがぶら下がる。 ルートノードから複数のチルドノードを設定する事ができて、各…
3DCG は現実空間と同じように3次元なので、 映画を撮るのと同じように、表示する対象物、それを撮るカメラ、 対象物をカメラから見えるようにするライトがあって初めて映像が完成する。 まとめると 3DCG を表現するには最低でもこの3つが必要 カメラ ライト …