Установите якорь без выстукивания

#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());