ARKitの紹介でよく見る、空間に絵を書くデモ。どの様な仕組みで書いているのか調べてみました。

実装する内容

タッチ中の座標に、renderer(_:updateAtTime:)の更新を利用して
 球体ノードを連続して追加するとお絵かきっぽくなります。
 

※公式リファレンス
https://developer.apple.com/documentation/scenekit/scnscenerendererdelegate/1522937-renderer

今回は、カスタムジオメトリは作成せずに、単に球体のノードを追加していく事で
お絵かきを実現していきます。
 
以下に実装の流れを記載します。
※ARKitの基本的な実装は、今回の説明からは省略しています。

タッチの座標と、状態を保持する変数を用意

タッチの座標とタッチの状態を保持するグローバル変数を用意します。

UIResponderを利用し、タッチ情報を取得

touchesBegan

タッチ状態をtrueに変更、タッチ座標を取得しtouchedLocation変数に格納

touchesMoved

タッチの動きに合わせて、座標を取得を続ける

touchesEnded

タッチ終了(指が離れる)の検知で、タッチ状態をfalseに変更

 

renderer(_:updateAtTime:)で球体ノードを追加

renderer(_:updateAtTime:)は、フレーム更新毎する度に呼ばれます。
isTouchingがtrue(タッチされている状態)の間は、ここで球体のノードを追加します。

端末負荷を下げる為に、一度作成したノードはコピーして再利用しています。

 

実行

お絵かきっぽくはなりますが、球体ノードの連続だとあまりきれいに描けないですね。

次回はカスタムジオメトリを作成して実装してみようと思います。

 

コード全文