ARKit: 検出平面を頼りに世界座標系上にNodeを配置する

p0dee
May 22, 2021

--

ARKitを始めてみた。ARKitで検出した平面を鍵に、AR空間にオブジェクトを固定配置しようとして、とっさに以下のような実装を考えた。

ARSCNViewDelegate.rendere(_:didAdd:for:)では、平面検出したsceneView.sessionが、その平面情報をARPlaneAnchorとしてsceneViewに追加、最終的にanchorの位置情報に従ってSCNNodeが追加したことを伝えている。このnodeを親ノードとして、表示したい子ノードを追加すれば良さそうだが、、

しかしこの親nodeは、カメラを動かすごとに更新される平面の検出結果に応じて、移動したり回転したりするのだった。つまり、AR空間に固定したと思った子ノードは、親nodeの移動や回転に追従してしまっていた。

以下のように、平面検出により追加されたnodeの座標を世界座標系に変換し、その座標にもとづきsceneView.rootNode直下に追加することで、期待する結果はひとまず得られた。

ちゃんと調べればより適切な方法がありそう。とはいえ、ノードの入れ子構造や座標系の変換が、UIView的で親近感があった。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response