Создайте приложение для Android с дополненной реальностью с помощью Google ARCore

Автор: Laura McKinney
Дата создания: 7 Lang L: none (month-011) 2021
Дата обновления: 1 Июль 2024
Anonim
AR Урок │ Разработка приложения на android. Дополненная реальность в Unity 3D
Видео: AR Урок │ Разработка приложения на android. Дополненная реальность в Unity 3D

Содержание


Импорт 3D-моделей с помощью плагина Sceneform

Обычно работа с 3D-моделями требует специальных знаний, но с выпуском плагина Sceneform Google сделал возможным рендеринг 3D-моделей с использованием Java - и без необходимость учиться OpenGL.

Плагин Sceneform предоставляет высокоуровневый API-интерфейс, который можно использовать для создания визуализируемых таблиц из стандартных виджетов, форм или материалов Android или из 3D-ресурсов, таких как файлы .OBJ или .FBX.

В нашем проекте мы будем использовать плагин Sceneform для импорта файла .OBJ в Android Studio. Каждый раз, когда вы импортируете файл, используя Sceneform, этот плагин автоматически:

  • Преобразуйте файл ресурсов в файл .sfb. Это оптимизированный во время выполнения двоичный формат Sceneform (.sfb), который добавляется в APK и затем загружается во время выполнения. Мы будем использовать этот файл .sfb для создания Renderable, который состоит из сеток, материалов и текстур и может быть размещен в любом месте расширенной сцены.
  • Создайте файл .sfa. Это файл описания ресурса, который представляет собой текстовый файл, содержащий удобочитаемое описание файла .sfb. В зависимости от модели вы можете изменить ее внешний вид, отредактировав текст в файле .sfa.


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

Установка плагина Sceneform

Плагин Sceneform требует Android Studio 3.1 или выше. Если вы не уверены, какую версию Android Studio вы используете, выберите «Android Studio> О Android Studio» на панели инструментов. В следующем всплывающем окне содержится некоторая базовая информация об установке Android Studio, включая номер версии.

Чтобы установить плагин Sceneform:

  • Если вы работаете на Mac, выберите «Android Studio> Настройки…» на панели инструментов Android Studio, затем выберите «Плагины» в меню слева. Если вы работаете на ПК с Windows, выберите «Файл> Настройки> Плагины> Обзор репозиториев».
  • Выполните поиск «Sceneform». Когда появится «Google Sceneform Tools», выберите «Установить».
  • При появлении запроса перезапустите Android Studio, и ваш плагин будет готов к использованию.


Sceneform UX и Java 8: обновление зависимостей вашего проекта

Давайте начнем с добавления зависимостей, которые мы будем использовать в этом проекте. Откройте файл build.gradle уровня модуля и добавьте библиотеку Sceneform UX, которая содержит ArFragment, который мы будем использовать в нашем макете:

зависимости {реализация fileTree (dir: libs, include:) реализация androidx.appcompat: appcompat: 1.0.2 реализация androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 // Sceneform UX предоставляет ресурсы UX, включая ArFragment // реализацию "com.google.ar.sceneform.ux: sceneform-ux: 1.7.0" реализация "ком. android.support:appcompat-v7:28.0.0 "}

Sceneform использует языковые конструкции из Java 8, поэтому нам также потребуется обновить Source Compatibility and Target Compatibility нашего проекта до Java 8:

compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

Наконец, нам нужно применить плагин Sceneform:

применить плагин: com.google.ar.sceneform.plugin

Ваш завершенный файл build.gradle должен выглядеть примерно так:

применить плагин: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test_rW_Rence_Vision_Vision_Vision_Vision_Vision_Vision_Vision_Vision_Vision_Vision JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} зависимости {реализация файла fileTree (dir: libs, include:) 1.0: androidx.appcompat: appat .2 реализация androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 реализация "com.google. ar.sceneform.ux: sceneform-ux: 1.7.0 "реализация" com.android.support:appcompat-v7:28.0.0 "} применить плагин: com.google.ar .sceneform.plugin

Запрос разрешений с ArFragment

Наше приложение будет использовать камеру устройства для анализа окружения и позиционирования 3D-моделей в реальном мире. Прежде чем наше приложение сможет получить доступ к камере, оно требует разрешения камеры, поэтому откройте Манифест вашего проекта и добавьте следующее:

Android 6.0 предоставил пользователям возможность предоставлять, отклонять и отзывать разрешения на основе разрешения. Хотя это улучшило пользовательский интерфейс, разработчики Android теперь вынуждены вручную запрашивать разрешения во время выполнения и обрабатывать ответ пользователя. Хорошей новостью является то, что при работе с Google ARCore реализован процесс запроса разрешения камеры и обработки ответа пользователя. автоматически.

Компонент ArFragment автоматически проверяет, имеет ли ваше приложение разрешение на использование камеры, а затем запрашивает его, если это необходимо, перед созданием сеанса AR. Поскольку мы будем использовать ArFragment в нашем приложении, нам не нужно писать какой-либо код для запроса разрешения камеры.

AR требуется или необязательно?

Существует два типа приложений, которые используют функции AR:

1. Требуется AR

Если ваше приложение использует Google ARCore для обеспечения хорошего взаимодействия с пользователем, вам нужно убедиться, что оно загружено только на устройства, которые поддерживают ARCore. Если вы отметите ваше приложение как «Требуется AR», оно будет отображаться в магазине Google Play только в том случае, если устройство поддерживает ARCore.

Поскольку наше приложение делает требует ARCore, откройте манифест и добавьте следующее:

Существует также вероятность того, что ваше приложение может быть загружено на устройство, которое теоретически поддерживает ARCore, но на самом деле не имеет установленного ARCore. Как только мы отметим наше приложение как «Требуется AR», Google Play автоматически загрузит и установит ARCore вместе с вашим приложением, если оно еще не установлено на целевом устройстве.

Просто знайте, что даже если ваше приложение android: required = "true", вы будете Все еще необходимо убедиться, что ARCore присутствует во время выполнения, поскольку существует вероятность того, что пользователь, возможно, удалил ARCore с момента загрузки вашего приложения или что его версия ARCore устарела.

Хорошей новостью является то, что мы используем ArFragment, который автоматически проверяет, что ARCore установлен и обновлен перед созданием каждый Сеанс AR - так что еще раз, это то, что нам не нужно реализовывать вручную.

2. AR необязательно

Если ваше приложение включает функции AR, которые приятны в использовании, но не являются необходимыми для предоставления его основных функций, вы можете пометить это приложение как «AR Optional». Затем ваше приложение может проверить, присутствует ли Google ARCore во время выполнения, и отключить его. Функции AR на устройствах, которые не поддерживают ARCore.

Если вы создадите приложение «AR Optional», ARCore не быть автоматически установленным вместе с вашим приложением, даже если устройство имеет все аппаратное и программное обеспечение, необходимое для поддержки ARCore. Тогда вашему приложению «AR Optional» необходимо будет проверить наличие и актуальность ARCore, а также загрузить последнюю версию по мере необходимости.

Если ARCore не имеет решающего значения для вашего приложения, вы можете добавить следующее в свой манифест:

Пока у меня открыт Манифест, я также добавляю android: configChanges и android: screenOrientation, чтобы MainActivity корректно обрабатывал изменения ориентации.

После добавления всего этого в ваш манифест, готовый файл должен выглядеть примерно так:

Добавьте ArFragment в свой макет

Я буду использовать ArFragment ARCore, поскольку он автоматически выполняет ряд ключевых задач ARCore в начале каждого сеанса AR. В частности, ArFragment проверяет, установлена ​​ли на устройстве совместимая версия ARCore и имеет ли приложение разрешение на использование камеры.

Как только ArFragment проверит, что устройство может поддерживать функции AR вашего приложения, он создает сеанс ArSceneView ARCore, и опыт AR вашего приложения готов к работе!

Вы можете добавить фрагмент ArFragment в файл макета, как обычный фрагмент Android, поэтому откройте свой файл activity_main.xml и добавьте компонент «com.google.ar.sceneform.ux.ArFragment».

Загрузка 3D-моделей с помощью Google Poly

Существует несколько различных способов создания Renderables, но в этой статье мы будем использовать файл 3D-ресурсов.

Sceneform поддерживает 3D-ресурсы в форматах .OBJ, .glTF и .FBX с анимацией или без нее. Существует множество мест, где вы можете приобрести 3D-модели в одном из этих поддерживаемых форматов, но в этом руководстве я буду использовать файл .OBJ, загруженный из репозитория Google Poly.

Перейдите на веб-сайт Poly и загрузите ресурс, который вы хотите использовать, в формате .OBJ (я использую эту модель T-Rex).

  • Разархивируйте папку, которая должна содержать исходный файл вашей модели (.OBJ, .FBX или .glTF). В зависимости от модели эта папка может также содержать некоторые зависимости модели, например, файлы в форматах .mtl, .bin, .png или .jpeg.

Импорт 3D-моделей в Android Studio

Когда у вас есть свой актив, вам нужно импортировать его в Android Studio с помощью плагина Sceneform. Это многошаговый процесс, который требует от вас:

  • Создайте папку «sampledata». Sampledata - это новый тип папки для образца данных времени разработки, который не будет включен в ваш APK, но будет доступен в редакторе Android Studio.
  • Перетащите исходный файл ресурсов .OBJ в папку «sampledata».
  • Выполните импорт и преобразование Sceneform для файла .OBJ, который сгенерирует файлы .sfa и .sfb.

Хотя это может показаться более простым, не перетащите файл .OBJ непосредственно в каталог res проекта, так как это приведет к ненужному включению модели в ваш APK.

Проекты Android Studio по умолчанию не содержат папку «sampledata», поэтому вам нужно создать ее вручную:

  • Удерживая клавишу Control, щелкните папку «app» вашего проекта.
  • Выберите «New> Sample Data Directory» и создайте папку с именем «sampledata».
  • Перейдите к файлам 3D-модели, которые вы загрузили ранее. Найдите исходный файл ресурсов (.OBJ, .FBX или .glTF), а затем перетащите его в каталог «sampledata».
  • Проверьте, есть ли у вашей модели какие-либо зависимости (например, файлы в форматах .mtl, .bin, .png или .jpeg). Если вы найдете какой-либо из этих файлов, перетащите их в папку «sampledata».
  • В Android Studio, удерживая клавишу Control, щелкните исходный файл 3D-модели (.OBJ, .FBX или .glTF) и выберите «Импортировать объект сцены».

  • В следующем окне отображается некоторая информация о файлах, которые Sceneform собирается сгенерировать, в том числе о том, где результирующий файл .sfa будет храниться в вашем проекте; Я собираюсь использовать «сырой» каталог.
  • Когда вы будете довольны введенной информацией, нажмите «Готово».

Этот импорт вносит несколько изменений в ваш проект. Если вы откроете свой файл build.gradle, то увидите, что плагин Sceneform был добавлен как зависимость проекта:

dependencies {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // ПРИМЕЧАНИЕ. Не размещайте здесь зависимости вашего приложения; они принадлежат // в отдельных файлах build.gradle модуля}}

Откройте файл build.gradle уровня модуля, и вы найдете новую запись sceneform.asset () для импортированной 3D-модели:

apply plugin: com.google.ar.sceneform.plugin // «Путь исходного ресурса», который вы указали при импорте // sceneform.asset (sampledata / dinosaur.obj, // «Путь материала», который вы указали при импорте // По умолчанию , // «Выходной путь .sfa», который вы указали при импорте // sampledata / dinosaur.sfa, // «Выходной путь .sfb», который вы указали при импорте // src / main / assets / dinosaur)

Если вы посмотрите на папки «sampledata» и «raw», то увидите, что они содержат новые файлы .sfa и .sfb соответственно.

Вы можете просмотреть файл .sfa в новой Sceneform Viewer в Android Studio:

  • Выберите «Вид> Инструменты Windows> Средство просмотра» в строке меню Android Studio.
  • В левом меню выберите файл .sfa. Ваша 3D-модель должна появиться в окне просмотра.

Покажите свою 3D модель

Наша следующая задача - создать сеанс AR, который понимает его окружение и позволяет пользователю размещать 3D-модели в дополненной сцене.

Это требует от нас сделать следующее:

1. Создайте переменную-член ArFragment

ArFragment выполняет большую часть тяжелой работы, связанной с созданием сеанса AR, поэтому мы будем ссылаться на этот фрагмент в нашем классе MainActivity.

В следующем фрагменте я создаю переменную-член для ArFragment, а затем инициализирую ее в методе onCreate ():

частный ArFragment arCoreFragment; @Override protected void onCreate (Bundle saveInstanceState) {super.onCreate (сохраненныйInstanceState); ... ... ...} setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Найти фрагмент, используя менеджер фрагментов // getSupportFragmentManager (). findFragmentById (R.id.main_fragment);

2. Построить модельRenderable

Теперь нам нужно преобразовать наш файл .sfb в ModelRenderable, который в конечном итоге будет отображать наш 3D-объект.

Здесь я создаю ModelRenderable из файла res / raw / dinosaur .sfb моего проекта:

частный ModelRenderable dinoRenderable; ... ... ... ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable) .exceptionally (throwable -> {Log.e ( TAG, "Невозможно загрузить рендеринг"); return null;}); }

3. Ответить на ввод пользователя

ArFragment имеет встроенную поддержку жестов касания, перетаскивания, сжатия и поворота.

В нашем приложении пользователь добавит 3D-модель в плоскость ARCore, нажав на эту плоскость.

Чтобы предоставить эту функцию, нам нужно зарегистрировать обратный вызов, который будет вызываться при каждом нажатии на самолет:

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, плоскость, MotionEvent motionEvent) -> {if (dinoRenderable == null) {return;}

4. Прикрепите вашу модель

На этом этапе мы собираемся получить ArSceneView и прикрепить его к AnchorNode, который будет служить родительским узлом сцены.

ArSceneView отвечает за выполнение нескольких важных задач ARCore, включая рендеринг изображений с камеры устройства и отображение анимации Sceneform UX, которая демонстрирует, как пользователь должен удерживать и перемещать свое устройство, чтобы начать работу с AR. ArSceneView также будет подсвечивать любые плоскости, которые он обнаружит, чтобы пользователь мог разместить свои 3D-модели в пределах сцены.

Компонент ARSceneView имеет прикрепленную к нему сцену, которая представляет собой структуру данных типа «родители-потомки», содержащую все узлы, которые необходимо отобразить.

Мы собираемся начать с создания узла типа AnchorNode, который будет выступать в качестве родительского узла нашего ArSceneView.

Все якорные узлы остаются в одной и той же позиции реального мира, поэтому, создавая якорный узел, мы гарантируем, что наши 3D-модели останутся зафиксированными на месте в расширенной сцене.

Давайте создадим наш якорный узел:

AnchorNode anchorNode = new AnchorNode (anchor);

Затем мы можем получить ArSceneView, используя getArSceneView (), и прикрепить его к AnchorNode:

anchorNode.setParent (arCoreFragment.getArSceneView () getScene ().);

5. Добавить поддержку для перемещения, масштабирования и вращения

Далее я собираюсь создать узел типа TransformableNode. TransformableNode отвечает за перемещение, масштабирование и вращение узлов на основе жестов пользователя.

Создав TransformableNode, вы можете прикрепить его к Renderable, который даст модели возможность масштабирования и перемещения в зависимости от взаимодействия с пользователем. Наконец, вам необходимо подключить TransformableNode к AnchorNode, в отношении дочерний / родительский, который обеспечивает TransformableNode а также Renderable остается фиксированным на месте в дополненной сцене.

TransformableNode transformableNode = новый TransformableNode (arCoreFragment.getTransformationSystem ()); // Подключаем transformableNode к anchorNode // transformableNode.setParent (anchorNode); transformableNode.setRenderable (dinoRenderable); // Выберите узел // transformableNode.select (); }); }

Завершенный MainActivity

После выполнения всего вышеперечисленного ваша MainActivity должна выглядеть примерно так:

импорт android.app.Activity; import android.app.ActivityManager; import androidx.appcompat.app.AppCompatActivity; импорт android.content.Context; импорт android.net.Uri; импорт android.os.Build; import android.os.Build.VERSION_CODES; импорт android.os.Bundle; импорт android.util.Log; import android.view.MotionEvent; импорт androidx.annotation.RequiresApi; 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.ux.ArFragment; import com.google.ar.sceneform.ux.TransformableNode; открытый класс MainActivity extends AppCompatActivity {частная статическая конечная строка TAG = MainActivity.class.getSimpleName (); приватный статический финал double MIN_OPENGL_VERSION = 3.0; // Создать переменную-член для ModelRenderable // private ModelRenderable dinoRenderable; // Создать переменную-член для ArFragment // private ArFragment arCoreFragment; @RequiresApi (api = VERSION_CODES.N) @Override protected void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState); if (! checkDevice ((this))) {return; } setContentView (R.layout.activity_main); arCoreFragment = (ArFragment) // Найти фрагмент, используя менеджер фрагментов // getSupportFragmentManager (). findFragmentById (R.id.main_fragment); if (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// Построение ModelRenderable // ModelRenderable.builder () .setSource (this, R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable ) .exceptionally (// Если возникает ошибка ... // throwable -> {//...then, затем выведите следующее в Logcat // Log.e (TAG, "Невозможно загрузить renderable"); return null;} ); } // Прослушивание событий onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult, Плоскость плоскости, MotionEvent motionEvent) -> {if (dinoRenderable == null) {return;} Anchor anchor = hitResult.createAnchor (); // Построить a узел типа AnchorNode // AnchorNode anchorNode = new AnchorNode (anchor); // Подключаем AnchorNode к сцене // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ()); // Создание узла типа TransformableNode // TransformableNode transformableNode = new TransformableNode (arCoreFragment.getTransformationSystem ()); // Подключить TransformableNode к AnchorNode // transformableNode.setParent (anchorNode); // Присоединить Renderable // transformableNode.setRenderable (dinoRenderable); // Установить узел / / transformableNode.select ();}); } public static boolean checkDevice (final Activity Activity) {// Если устройство работает под управлением Android Marshmallow или более ранней версии ... // if (Build.VERSION.SDK_INT <VERSION_CODES.N) {//...then выведите следующее Logcat // Log.e (TAG, «Sceneform требует Android N или выше»); activity.finish (); вернуть ложь; } String openGlVersionString = ((ActivityManager) activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // Проверка версии OpenGL ES // .getGlEsVersion (); // Если на устройстве работает что-то меньшее, чем OpenGL ES 3.0 ... // if (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {//...then, напечатайте следующее в Logcat // Log.e (TAG, " Требуется OpenGL ES 3.0 или выше "); activity.finish (); вернуть ложь; } вернуть истину; }}

Вы можете скачать готовый проект с GitHub.

Тестирование вашего приложения дополненной реальности Google ARCore

Теперь вы готовы протестировать свое приложение на физическом поддерживаемом устройстве Android. Если у вас нет устройства, поддерживающего ARCore, то вы можете протестировать свое приложение AR в эмуляторе Android (с небольшой дополнительной настройкой, о которой мы расскажем в следующем разделе).

Чтобы проверить свой проект на физическое Android-устройство:

  • Установите приложение на целевом устройстве.
  • При появлении запроса предоставьте приложению доступ к камере вашего устройства.
  • Если будет предложено установить или обновить приложение ARCore, нажмите «Продолжить», а затем завершите диалог, чтобы убедиться, что вы используете самую последнюю и лучшую версию ARCore.
  • Теперь вы должны увидеть изображение камеры с анимацией руки, держащей устройство. Направьте камеру на плоскую поверхность и перемещайте устройство круговыми движениями, как показано на анимации. Через несколько секунд должна появиться серия точек, указывающих, что плоскость была обнаружена.

  • Если вы довольны положением этих точек, коснитесь их - ваша 3D-модель должна появиться на выбранной вами плоскости!

  • Попробуйте физически передвигаться по модели; в зависимости от вашего окружения, вы можете сделать все 360 градусов вокруг него. Вы также должны проверить, что объект отбрасывает тень, которая соответствует источникам света реального мира.

Тестирование ARCore на виртуальном устройстве Android

Чтобы протестировать приложения ARCore на виртуальном устройстве Android (AVD), вам понадобится эмулятор Android версии 27.2.9 или выше. Вы также должны войти в магазин Google Play на своем AVD и включить OpenGL ES 3.0 или выше.

Чтобы проверить, включен ли в настоящий момент OpenGL ES 3.0 или выше на вашем AVD:

  • Запустите свой AVD, как обычно.
  • Откройте новое окно терминала (Mac) или командную строку (Windows).
  • Измените каталог («cd»), чтобы Terminal / Command Prompt указывал на местоположение вашей «adb» программы вашего Android SDK, например, моя команда выглядит так:

CD / Пользователи / jessicathornsby / Библиотека / Android / SDK / платформа-инструменты

  • Нажмите клавишу «Ввод» на клавиатуре.
  • Скопируйте / вставьте следующую команду в Терминал, а затем нажмите клавишу «Ввод»:

./adb logcat | grep eglMakeCurrent

Если Терминал возвращает «ver 3 0» или выше, то OpenGL ES настроен правильно. Если в терминале или командной строке отображается что-то более раннее, чем 3.0, то вам необходимо включить OpenGL ES 3.0:

  • Вернитесь к своему AVD.
  • Найдите полосу кнопок «Расширенное управление», которые расположены рядом с эмулятором Android, и выберите «Настройки> Дополнительно».
  • Перейдите к «Уровень API OpenGL ES> Максимум рендерера (до OpenGL ES 3.1)».
  • Перезапустите эмулятор.

В окне терминала / командной строки скопируйте / вставьте следующую команду, а затем нажмите клавишу «Ввод».

./adb logcat | grep eglMakeCurrent

Теперь вы должны получить результат «ver 3 0» или выше, что означает, что OpenGL ES настроен правильно.

Наконец, убедитесь, что на вашем AVD установлена ​​самая последняя версия ARCore:

  • Перейдите на страницу ARCore GitHub и загрузите последнюю версию ARCore для эмулятора. Например, на момент написания статьи самым последним выпуском был «ARCore_1.7.0.x86_for_emulator.apk»
  • Перетащите APK на ваш работающий AVD.

Чтобы протестировать свой проект на AVD, установите приложение и предоставьте ему доступ к «камере» AVD при появлении соответствующего запроса.

Теперь вы должны увидеть изображение с камеры моделируемой комнаты. Чтобы протестировать ваше приложение, обойдите это виртуальное пространство, найдите имитированную плоскую поверхность и щелкните, чтобы разместить модель на этой поверхности.

Вы можете перемещать виртуальную камеру по виртуальной комнате, нажимая и удерживая клавиши «Option» (macOS) или «Alt» (Linux или Windows), а затем используя любое из следующих сочетаний клавиш:

  • Двигайтесь влево или вправо. Нажмите A или D.
  • Двигайся вниз или вверх. Нажмите Q или E.
  • Двигаться вперед или назад. Нажмите W или S.

Вы также можете «перемещаться» по виртуальной сцене, нажимая «Option» или «Alt», а затем с помощью мыши. Поначалу это может показаться немного неуклюжим, но с практикой вы сможете успешно исследовать виртуальное пространство. Когда вы найдете имитируемую плоскость, щелкните белыми точками, чтобы разместить 3D-модель на этой поверхности.

Завершение

В этой статье мы создали простое приложение с дополненной реальностью, используя ARCore и плагин Sceneform.

Если вы решили использовать Google ARCore в своих собственных проектах, то обязательно поделитесь своими творениями в комментариях ниже!

Разблокировка лица amung Galaxy 10, очевидно, была побеждена фотографиями и видеоклипами.Известный разработчик даже сообщил, что ей удалось разблокировать Galaxy 10 своего брата.Вы, вероятно, должны п...

ОБНОВИТЬ: Линейка amung Galaxy 10 и Galaxy Fold теперь официально!Добро пожаловать на крупнейший запуск amung за последние годы....

Новые посты