Рубрики
Без рубрики

Как создавать Приложения Аргументированной Реальности В Android С Ar-Ядром

Эта статья поможет вам понять Аргументированную реальность в Android.

Автор оригинала: Dancan Yego.

(изображение предоставлено Google)

Что такое Хардкор?

Hardcore – это набор для разработки программного обеспечения, разработанный Google, который позволяет создавать приложения дополненной реальности.

ARCore использует три ключевые технологии для интеграции виртуального контента с реальной средой:

Отслеживание движения:

это позволяет телефону понять свое положение относительно окружающего мира.

Экологическое понимание:

Это позволяет телефону определять размер и расположение всех типов поверхностей, вертикальных, горизонтальных и наклонных.

Оценка Освещенности:

это позволяет телефону оценивать текущие условия освещения окружающей среды.

Как это работает

Вы когда-нибудь видели, почему большинство приложений с повышенной реальностью требуют, чтобы вы перемещали камеру по пространству для идентификации поверхностей? Это объясняется тем, что приложению необходимо создать свою собственную вселенную. Хардкор-это то же самое.

В тот момент, когда вы перемещаете свой телефон, ARCore запоминает факторы окружающей среды и создает свою собственную вселенную, в которую он может помещать виртуальные предметы. Он использует инновации, следующие за движением, для распознавания определенных основных моментов, которые позволяют ему отслеживать, как эти фокусы перемещаются в соответствии с разработками вашей камеры.

Именно по этой причине, когда вы размещаете виртуальный предмет в своей комнате, выходите и возвращаетесь, предмет все еще там!! Хардкор собрал представление о земле и создал виртуальное существование, в котором он вспоминает, где находится каждый элемент.

В тот момент, когда вы размещаете статью, она определяет ситуацию, соответствующую различным элементам, и когда вы возвращаетесь в аналогичное место, статья отображается еще раз.

Основные приложения A R Можно использовать в

Android Android NDK Unity для Android Unity для iOS iOS Нереально

приступая к работе

o чтобы начать разработку хардкорных приложений, сначала вам нужно включить хардкор в свой проект. Это просто, так как мы будем использовать Android Studio и SDK для создания сцен. Есть две основные операции, Сцена из которых выполняется автоматически:

Проверка доступности ARCore Запрос разрешения камеры

Шаг 1.Создайте новый проект Android Studio и выберите пустое действие.

Затем добавьте следующую зависимость в файл build.gradle на уровне проекта:

dependencies {    classpath 'com.google.ar.sceneform:plugin:1.5.0'}

Добавьте последнюю библиотеку ARCore в качестве зависимости в файл build.gradle вашего приложения:

dependencies {
   
    implementation 'com.google.ar:core:1.16.0'
    implementation "com.google.ar.sceneform.ux:sceneform-ux:1.5.0"

}

Затем синхронизируйте свой проект с файлами Gradle и дождитесь завершения сборки. Это позволит установить сцену из SDK в проект и плагин формы сцены в Android Studio. Это поможет вам просмотреть файлы .sbf. Эти файлы представляют собой 3D – модели, которые отображаются в вашей камере. Это также помогает вам в импорте, просмотре и создании 3D-ресурсов.

В настоящее время, когда наша синхронизация с Android Studio завершена и установлена сцена из SDK, мы можем начать с создания нашего абсолютно первого приложения ARCore.

Во-первых, мы должны добавить Сцену из пьесы в нашу дизайнерскую запись. Здесь мы разместим все наши 3D-модели. Он имеет дело с камерой, о которой заботятся оператор и авторизация.

Перейдите к вашему основному проектному документу. Для моей ситуации это так activity_main.xml и включите сцену из части:




    

    


Это все, что вам нужно сделать в файле макета. Теперь перейдите к нашему java-файлу MainActivity, в моем случае это MainActivity.java. Добавьте в свой класс приведенный ниже метод, который поможет с проверкой совместимости:

public static boolean checkIsSupportedDeviceOrFinish(final Activity activity) {  
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {  
        Log.e(TAG, "Sceneform requires Android N or later");  
        Toast.makeText(activity, "Sceneform requires Android N or later", Toast.LENGTH_LONG).show(); 
        activity.finish();        return false;    } 
        String openGlVersionString =           
        ((ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE)).getDeviceConfigurationInfo() 
        .getGlEsVersion();    if (Double.parseDouble(openGlVersionString) < MIN_OPENGL_VERSION) { 
            Log.e(TAG, "Sceneform requires OpenGL ES 3.0 later");
            Toast.makeText(activity, "Sceneform requires OpenGL ES 3.0 or later", Toast.LENGTH_LONG).show();
            activity.finish();
            return false;
            }
            return true;
    
}

Этот метод проверяет, может ли ваше устройство поддерживать сцену из SDK или нет. Для SDK требуется Android API 27 или более текущего уровня и форма OpenGL ES 3.0 или более свежая. В случае, если гаджет не поддерживает эти два, сцена не будет отображаться, и ваше приложение покажет чистый экран.

Несмотря на это, в настоящее время вы можете продолжать передавать различные основные моменты вашего приложения, для которых не требуется SDK Sceneform.

В настоящее время с помощью общей проверки сходства устройств мы построим наше 3D-шоу и добавим его к сцене.

Вам нужно будет добавить 3D-модели, которые будут отображаться на вашем экране. Теперь вы можете создавать эти модели самостоятельно, если вы знакомы с созданием 3D-моделей. Или вы можете посетить Поли .Где вы можете получить тонны 3d – объектов, чтобы продолжить этот проект. После получения желаемой 3d-модели Создайте новую папку внутри каталога приложений И назовите ее Образцами данных, в которых будут размещены ваши 3D-объекты. Они могут быть различных расширений, например

.mtl файл .obj файл .png файл

Следующим шагом Мы будем строить Модель С помощью следующей строки кода

private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;

    ArFragment arFragment;
    ModelRenderable lampPostRenderable;
    private Uri selectedObject;

    @Override
    @SuppressWarnings({"AndroidApiChecker", "FutureReturnValueIgnored"})
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);

        initializeGallery();

        
        );

Сначала мы находим расположение, которое мы включили в файл макета. Этот фрагмент отвечает за размещение сцены. Вы можете думать об этом как о контейнере нашей сцены.

Затем мы используем класс визуализации модели для построения нашей модели. С помощью метода setSource мы загружаем нашу модель из файла .sfb. Этот файл был создан при импорте ресурсов. затем метод Accept получает модель после ее построения. Мы устанавливаем загруженную модель на наш отрисовываемый фонарный столб.

Для обработки ошибок у нас есть .исключительно метод. Он вызывается в случае возникновения исключения.

Кроме того, это происходит асинхронно, поэтому вам не нужно беспокоиться о многопоточности или иметь дело с обработчиками XD.

Теперь, когда модель загружена и сохранена в переменной lampPostRenderable, мы добавим ее в нашу сцену.

Следующим шагом Мы добавим Нашу модель на сцену И здесь нам нужно будет установить onTaplistener на наш фрагмент, чтобы зарегистрировать кран и разместить объект соответствующим образом. Фрагмент ar содержит нашу сцену и будет получать события tap. Добавьте следующий код в метод onCreate:

arFragment.setOnTapArPlaneListener(
                (HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
                    if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
                        return;

                    Anchor anchor = hitresult.createAnchor();
                    placeObject(arFragment, anchor, Uri.parse("chair.sfb"));
                }
        );

    }

Теперь мы установили onTapArPlaneListener для нашего фрагмента AR. Затем мы продолжили создавать наш якорь из результата попадания с помощью hitresult.create Anchor() и сохраняем его в объекте привязки.

Затем создайте узел из этого якоря. Он будет называться Якорным узлом. Он будет прикреплен к сцене, вызвав на ней метод SetParent и передав сцену из фрагмента.

Теперь мы создаем Трансформируемый узел, который будет нашим фонарным столбом, и устанавливаем его в точку привязки или в ваш узел привязки. Узел по-прежнему не имеет никакой информации об объекте, который он должен отобразить. Мы передадим этот объект с помощью метода lamp.setRenderable, который принимает визуализируемый объект в качестве параметра. Наконец, вызовите лампу.выберите();

Заключительная Основная Деятельность. Java должна быть похожа на эту

package com.danny.arcore;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.widget.Toast;

import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.rendering.Renderable;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.TransformableNode;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;

    ArFragment arFragment;
    ModelRenderable lampPostRenderable;
    private Uri selectedObject;

    @Override
    @SuppressWarnings({"AndroidApiChecker", "FutureReturnValueIgnored"})
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);

        // initializeGallery();

        arFragment.setOnTapArPlaneListener(
                (HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
                    if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
                        return;

                    Anchor anchor = hitresult.createAnchor();
                    placeObject(arFragment, anchor, Uri.parse("chair.sfb"));
                }
        );

    }

    private void placeObject(ArFragment arFragment, Anchor anchor, Uri uri) {
        ModelRenderable.builder()
                .setSource(arFragment.getContext(), uri)
                .build()
                .thenAccept(modelRenderable -> addNodeToScene(arFragment, anchor, modelRenderable))
                .exceptionally(throwable -> {
                            Toast.makeText(arFragment.getContext(), "Error:" + throwable.getMessage(), Toast.LENGTH_LONG).show();
                            return null;
                        }

                );

    }

    private void addNodeToScene(ArFragment arFragment, Anchor anchor, Renderable renderable) {
        AnchorNode anchorNode = new AnchorNode(anchor);
        TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
        node.setRenderable(renderable);
        node.setParent(anchorNode);
        arFragment.getArSceneView().getScene().addChild(anchorNode);
        node.select();
    }

}

Полный исходный код можно найти по адресу Эта ссылка на Github

Счастливого Обучения И еще больше кредитов (Аюш)

Оригинал: “https://www.codementor.io/@dancanyego/how-to-build-argumented-reality-apps-in-android-with-ar-core-1637t2zt1c”