В этой статье представлены руководства по созданию приложения дополненной реальности для 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. Приношу искренние извинения, если в статье были какие-то неточности. Если вы нашли это полезным, пожалуйста, дайте ему голос.