#android #arcore
Вопрос:
Есть ли способ разместить якоря, не касаясь экрана. Я не хочу размещать какую-либо модель ar без нажатия. Так, например, я поместил якорь в центре экрана и в середине краев, есть ли способ сделать это, фактически не касаясь соответствующих позиций на экране.
Ответ №1:
Просто возьмите следующую пару строк кода из функции handleTap в /samples/…/HelloArActivity.java но сначала вставьте что-нибудь из центра в структуру попадания: anchors.add(hit.createAnchor()); this.runOnUiThread(это::showOcclusionDialogIfNeeded);
Ответ №2:
Как говорит @YinOrYan, вы можете использовать стандартный подход для добавления якорей в фиксированной точке, например, в центре предварительного просмотра.
Вы можете добавить кнопку в любом месте пользовательского интерфейса, чтобы фактически запустить код для добавления привязки.
Например — это добавляет кнопку поверх представления AR:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="LineViewMainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.FloatingActionButton
android:id="@ id/add_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="5dp"
android:visibility="invisible"
android:src="@mipmap/ic_add_image" />
<fragment
android:id="@ id/ux_fragment"
android:name="com.google.ar.sceneform.ux.ArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</FrameLayout>
Затем вы можете связать код для добавления привязки и отображения для прослушивателя для этой кнопки — приведенный ниже код взят из примера, в котором объект добавляется перед камерой, но вы можете изменить его по мере необходимости:
// Place the anchor 1m in front of the camera.
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor newMarkAnchor = session.createAnchor(
frame.getCamera().getPose()
.compose(Pose.makeTranslation(0, 0, -1f)) //This will place the anchor 1M in front of the camera
.extractTranslation());
AnchorNode addedAnchorNode = new AnchorNode(newMarkAnchor);
addedAnchorNode.setRenderable(andyRenderable);
addedAnchorNode.setParent(arFragment.getArSceneView().getScene());