2017-09-19 34 views
0

私はARベースのアプリケーションに取り組んでいます。私は例としてhttps://docs-assets.developer.apple.com/published/c5ad3d23f4/Handling3DInteractionandUIControlsinAugmentedReality.zipを使用しています。私は、3Dオブジェクトの各子ノード上に同じテキスト記述を持つオーバーレイを実装しようとしています。iOS 11でScenekit - ARKitを使用して子ノードの位置を取得する方法は?

私はそれぞれの子ノードの位置を取得しようとしました。例えば、リンゴのサンプルでchairオブジェクトを取ると、Xcodeシーンエディタを見ると、すべての子ノードが同じ位置に配置されます。この場合、子ノードの中心位置を取得する方法は?たとえば、私は約を取得する必要があります。椅子の足の位置、それを行う方法?

答えて

1

ノードの位置は、少なくともシーンのrootNodeでは常に他のノードと相対的です。ルートノード(つまりワールド空間内の位置)に対する子ノードの位置を取得するには、convertPositionをrootNodeに使用できます。親ノードに対する子ノードの位置を取得するには、その位置を親ノードの空間に変換することができます。 https://developer.apple.com/documentation/scenekit/scnscenerenderer/1524089-projectpoint

椅子脚のピボットはの中心に位置していない場合:あなたが取得した後

https://developer.apple.com/documentation/scenekit/scnnode/1407990-convertposition

はワールド空間を使用すると、2D画面に3次元位置座標に変換するprojectPointを使用することができます座標脚、その位置はその中心にもならない。その場合、中心を取得するには、ノード境界ボックス(SCNBoundingVolumeを参照)の最小値と最大値の平均値を使用するか、単純にオーバーレイの2D位置のオフセットを使用します。

+0

はい私は世界空間に対して位置を変換しましたが、それでもすべての子ノードの位置はまったく同じです。 Xcodeシーンエディタを見ると、すべての子ノードの位置が同じであることがわかります。これはいつですか?それは私が使用しているモデルのバグですか?椅子モデルであっても、すべての子ノードの位置は同じままです。 – yaali