В этой статье представлены руководства по созданию приложения дополненной реальности для Android с помощью Google Sceneform SDK.

Примечание: Google SceneForm сейчас устарел, мы будем использовать его продолжение SceneView (https://github.com/SceneView/sceneform-android)

Вот некоторые превью того, что мы собираемся построить,

Sceneform — это 3D-фреймворк, упрощающий создание приложений ARCore без OpenGL. Это упрощает визуализацию реалистичных 3D-сцен в приложениях с дополненной реальностью и без дополненной реальности без необходимости изучения OpenGL.

В этой статье мы сосредоточимся на разработке приложения для Android с использованием Java и Kotlin, которое визуализирует 3D-футболку.

Вот репозиторий исходного кода на github:
https://github.com/mssandeepkamath/ar-sceneview-example.

Во-первых, нам нужно добавить зависимость от формы сцены на уровне модуля gradle.build.

gradle.build (модуль: приложение)

implementation "com.gorisse.thomas.sceneform:sceneform:1.21.0"

Разрешите вашему приложению запрашивать доступ к камере, а также добавьте метаданные, чтобы ваше приложение могло определить потребность в ar-core.

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />

<application>
   ...
   <meta-data
        android:name="com.google.ar.core"
        android:value="optional" />
</application>

Создайте пустое действие с именем ARActivity и добавьте следующий фрагмент в файл activity_ar.xml.

activity_ar.xml

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/arFragment"
        android:name="com.google.ar.sceneform.ux.ArFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

Важно проверить, совместимо ли устройство Android с AR, поэтому создайте функцию внутри ARActivity.java.

public static boolean checkSystemSupport(Activity activity) {
      // checking whether the API version of the running Android >= 24
      // that means Android Nougat 7.0
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
          String openGlVersion = ((ActivityManager) Objects.requireNonNull(activity.getSystemService(Context.ACTIVITY_SERVICE))).getDeviceConfigurationInfo().getGlEsVersion();
          // checking whether the OpenGL version >= 3.0
          if (Double.parseDouble(openGlVersion) >= 3.0) {
              return true;
          } else {
              Toast.makeText(activity, "App needs OpenGl Version 3.0 or later", Toast.LENGTH_SHORT).show();
              activity.finish();
              return false;
          }
      } else {
          Toast.makeText(activity, "App does not support required Build Version", Toast.LENGTH_SHORT).show();
          activity.finish();
          return false;
      }
  }

Если ваше устройство проходит проверку на совместимость, вам нужно начать с процесса рендеринга 3D-модели, поэтому добавьте следующий код в функцию onCreate ARActivity.java.

if (checkSystemSupport(this)) {
          //Connecting to the UI
          // ArFragment is linked up with its respective id used in the activity_main.xml
          arCam = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.arFragment);

          assert arCam != null;
          arCam.setOnTapArPlaneListener((hitResult, plane, motionEvent) -> {
              clickNo++;
              //rendering the model when click is 1
              if (clickNo == 1) {
                  //fixing the coordinates in the detected plane
                  Anchor anchor = hitResult.createAnchor();
                  ModelRenderable.builder()
                          .setSource(this,R.raw.tshirt) // set glb model
                          .setIsFilamentGltf(true)
                          .build()
                          .thenAccept(modelRenderable -> addModel(anchor, modelRenderable))
                          .exceptionally(throwable -> {
                              AlertDialog.Builder builder = new AlertDialog.Builder(this);
                              builder.setMessage("Something is not right" + throwable.getMessage()).show();
                              return null;
                          });
              }
          });
      }

Примечание. 3D-модель должна быть в формате .glb, и я поместил ее в папку res/drawable/raw.

Создайте функцию для визуализации 3D-модели и добавьте ее в ARActivity.java,

private void addModel(Anchor anchor, ModelRenderable modelRenderable) {
          // Creating a AnchorNode with a specific anchor
          AnchorNode anchorNode = new AnchorNode(anchor);

          // attaching the anchorNode with the ArFragment
          anchorNode.setParent(arCam.getArSceneView().getScene());

          // attaching the anchorNode with the TransformableNode
          TransformableNode model = new TransformableNode(arCam.getTransformationSystem());
          model.setParent(anchorNode);
          // attaching the 3d model with the TransformableNode
          // that is already attached with the node
          model.setRenderable(modelRenderable);
          model.select();
      }

Это почти все. Для полной реализации посмотрите,



Вот еще несколько примеров проектов,





Основная цель статьи состояла в том, чтобы показать, насколько просто разработать приложение дополненной реальности с использованием SDK сцены от Google. Приношу искренние извинения, если в статье были какие-то неточности. Если вы нашли это полезным, пожалуйста, дайте ему голос.