2017-09-22 9 views
-1

画面の中央にUIView、この場合は100x100があり、ユーザーの「ターゲット」ガイドラインのように機能するはずです。SceneKit/ARKit:画面オブジェクトを3Dオブジェクトにマップ

ユーザーが[追加]ボタンを押したときに、画面上にUIViewの幅と高さ/尺度/距離/回転とが完全に同じ場所に追加されます。

This image私が意味することを理解するのに役立ちます。

UIViewのサイズは異なる場合がありますが、常に四角で画面の中央に表示されます。対応する3Dモデルも変化する可能性があります。この場合、正方形UIViewはボックスにマップされますが、後で同じ四角形のUIViewが対応する直径(幅)と高さを持つ円柱にマッピングされます。

どのように私はこれのような何かを達成することができますか?

私はUIViewスクラップとsceneView.pointOfViewの子として、プレースホルダとして箱を設置しようとした、と後でそれは運と位置/ rootNodeの親、です変換します。

ありがとうございました!

答えて

0

親ビューでUIViewの中心位置を取得し、SCNRendererのunprojectPointメソッドを使用してシーン内の3D座標に変換し、3Dオブジェクトを配置する位置を取得します。 z値を決める手段を実装する必要があります。

オブジェクトの距離によって画面のサイズが決まることは明らかですが、オブジェクトのスケーリングもしたい場合は、カメラのズームレベルの逆数をスケールとして使用できます。ズームレベルとは、独自のズーム手段を意味します(たとえば、カメラをデフォルトの距離より近くに動かすと、より小さなスケールのモデルが作成されます)。 UIViewのサイズが変更された場合は、中心点に加えて、または中心点の代わりに、すべてのコーナー点を3D空間に個別に投影することができますが、uiviewの縮尺を3Dノードの縮尺に変換する方が簡単です。たとえば、UIViewの最大サイズを知っている場合、その最大サイズのパーセンテージとしてより小さなビューを表現し、同じパーセンテージを使用してオブジェクトのスケーリングを行うことができます。

また、オブジェクトの回転はUIViewに対応する必要があります。私はあなたがオブジェクトをカメラに向けることを意味すると仮定します。このために、pointOfViewノードの.transformプロパティに基づいてオブジェクトにローテーションを適用できます。

関連する問題