ARKitを始めてみた。ARKitで検出した平面を鍵に、AR空間にオブジェクトを固定配置しようとして、とっさに以下のような実装を考えた。
ARSCNViewDelegate.rendere(_:didAdd:for:)
では、平面検出したsceneView.session
が、その平面情報をARPlaneAnchor
としてsceneView
に追加、最終的にanchor
の位置情報に従ってSCNNode
が追加したことを伝えている。このnode
を親ノードとして、表示したい子ノードを追加すれば良さそうだが、、
しかしこの親node
は、カメラを動かすごとに更新される平面の検出結果に応じて、移動したり回転したりするのだった。つまり、AR空間に固定したと思った子ノードは、親node
の移動や回転に追従してしまっていた。
以下のように、平面検出により追加されたnode
の座標を世界座標系に変換し、その座標にもとづきsceneView.rootNode
直下に追加することで、期待する結果はひとまず得られた。
ちゃんと調べればより適切な方法がありそう。とはいえ、ノードの入れ子構造や座標系の変換が、UIView
的で親近感があった。