На этой странице объясняются ключевые концепции путем изучения кода примера приложения Hello Sceneform . Примечание:
В этом примере используются Sceneform и ARCore.
Чтобы использовать Sceneform без ARCore, выполните следующие шаги, игнорируя требования к зависимостям ARCore и разрешению CAMERA. Используйте
SceneView
в макете вашего приложения, как описано в разделе Создание сцены .Этот образец приложения написан как приложение, требующее дополненной реальности.
Дополнительные сведения о приложениях с поддержкой дополненной реальности и приложениях, требующих дополненной реальности, см. в разделе Включение ARCore .
Чтобы начать использовать Sceneform в своем проекте, вам необходимо:
- Импорт плагина Sceneform
- Настройте файлы
build.gradle
вашего проекта - Обновите свой
AndroidManifest.xml
- Выполните проверки во время выполнения и создайте представление сцены
- Создать визуализацию
- Создайте сцену
Импортируйте плагин Sceneform в свой проект
После установки подключаемый модуль Sceneform позволяет импортировать, просматривать и создавать 3D-ресурсы в SDK Sceneform для приложений дополненной реальности в Android Studio. Для этого требуется Android Studio версии 3.1 и выше.
Чтобы установить плагин:
В Android Studio откройте настройки плагинов :
Windows: Файл > Настройки > Плагины > Обзор репозиториев
macOS: Android Studio > Настройки > Плагины
Щелкните Обзор репозиториев и установите Google Sceneform Tools (бета-версия) .
Настройте файлы build.gradle
вашего проекта
Убедитесь, что
build.gradle
вашего проекта включает репозиторий Google Maven:allprojects { repositories { google() …
Обновите
build.gradle
вашего приложения, чтобы добавить последние зависимости ARCore и Sceneform UX, и убедитесь, что настройки вашего проекта совместимы с обеими библиотеками.android { … defaultConfig { // Sceneform requires minSdkVersion >= 24. minSdkVersion 24 … } // Sceneform libraries use language constructs from Java 8. // Add these compile options if targeting minSdkVersion < 26. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { … // Provides ARCore Session and related resources. implementation 'com.google.ar:core:1.15.0' // Provides ArFragment, and other UX resources. implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0' // Alternatively, use ArSceneView without the UX dependency. implementation 'com.google.ar.sceneform:core:1.15.0' }
Обновите свой AndroidManifest.xml
Измените файл AndroidManifest.xml
, чтобы указать, что ваше приложение использует ( необязательный AR ) или требует (требуется AR ) доступ к ARCore и CAMERA:
<!-- Both "AR Optional" and "AR Required" apps require CAMERA permission. -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Sceneform requires OpenGL ES 3.0 or later. -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
<!-- Indicates that app requires ARCore ("AR Required"). Ensures the app is
visible only in the Google Play Store on devices that support ARCore.
For "AR Optional" apps remove this line. -->
<uses-feature android:name="android.hardware.camera.ar" />
<application>
…
<!-- Indicates that app requires ARCore ("AR Required"). Causes the Google
Play Store to download and install Google Play Services for AR along
with the app. For an "AR Optional" app, specify "optional" instead of
"required".
-->
<meta-data android:name="com.google.ar.core" android:value="required" />
</application>
Выполните проверки во время выполнения и создайте представление сцены
Самый простой способ начать использовать Sceneform и создать представление сцены — это использовать ArFragment
, который автоматически обрабатывает управление сеансом ARCore после выполнения необходимых проверок во время выполнения ARCore:
Проверяет, установлена ли совместимая версия Google Play Services для AR , предлагая пользователю установить или обновить ее по мере необходимости.
Проверяет, есть ли у приложения доступ к камере, и запрашивает у пользователя разрешение, если оно еще не было предоставлено
Если вашему приложению необходимо запрашивать дополнительные разрешения или вы хотите настроить способ и время создания сеанса дополненной реальности, вы можете вместо этого:
Создайте подкласс
ArFragment
для запроса дополнительных разрешений.Используйте или
ArSceneView
напрямую. Ваше приложение должно выполнить проверку версии ARCore и вызватьsetupSession()
для создания сеанса ARCore вручную, как показано в примере Solar System .
После прохождения проверки ArFragment
создает:
ArSceneView
, доступный черезgetArSceneView()
, который:Отрисовывает изображения камеры из сеанса на своей поверхности
Визуализирует встроенную анимацию UX Sceneform, которая показывает пользователям, как они должны перемещать свой телефон, чтобы активировать возможности дополненной реальности.
Выделяет обнаруженные
Planes
с помощьюPlaneRenderer
по умолчанию.
Session
ARCore, доступная черезgetSession()
Чтобы использовать ArFragment
в своем приложении, добавьте его в макет действия, как показано в файле activity_ux.xml
в образце Hello Sceneform :
<fragment android:name="com.google.ar.sceneform.ux.ArFragment"
android:id="@+id/ux_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Создать визуализацию
Renderable
— это 3D-модель, которая может быть размещена в любом месте сцены и состоит из мешей, материалов и текстур.
Renderables могут быть созданы из:
Стандартные Android
ViewRenderable
визуализируются как плоские 2D-карты в 3D-сцене, при этом сохраняется возможность взаимодействия с ними посредством касания.Файлы 3D-ресурсов (OBJ, FBX, glTF) можно импортировать, конвертировать и просматривать с помощью подключаемого модуля Android Studio. Дополнительные сведения см. в разделе Импорт и предварительный просмотр 3D-объектов .
Основные формы и материалы можно программно комбинировать для создания более сложных объектов во время выполнения.
Пример приложения создает визуализацию из файла 3D andy.obj
. Когда этот актив импортируется, плагин Sceneform обновляет build.gradle
приложения, чтобы применить плагин и добавить запись sceneform.asset()
для импортированной модели:
apply plugin: 'com.google.ar.sceneform.plugin'
sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
'default', // 'Material Path' specified during import.
'sampledata/models/andy.sfa', // '.sfa Output Path' specified during import.
'src/main/res/raw/andy') // '.sfb Output Path' specified during import.
Ресурс res/raw/andy
используется для создания ModelRenderable
:
private ModelRenderable andyRenderable;
@Override
protected void onCreate(Bundle savedInstanceState) {
…
ModelRenderable.builder()
.setSource(this, R.raw.andy)
.build()
.thenAccept(renderable -> andyRenderable = renderable)
.exceptionally(
throwable -> {
Log.e(TAG, "Unable to load Renderable.", throwable);
return null;
});
}
Создайте сцену
К ARSceneView
прикреплена Scene
. Сцена представляет собой древовидную структуру данных, содержащую Node
, которые являются виртуальными объектами для визуализации.
Здесь рендеринг andy прикреплен непосредственно к корневому узлу сцены:
Node node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(andyRenderable);
Каждый узел содержит всю информацию, необходимую Sceneform для его рендеринга (включая его положение, ориентацию и визуализируемый объект), а также для взаимодействия с ним (включая его форму столкновения и прослушиватели событий).
Узлы могут быть добавлены к другим узлам, образуя отношения родитель-потомок. Когда узел является дочерним по отношению к другому узлу, он перемещается, вращается и масштабируется вместе со своим родителем — подобно тому, как двигаются ваши руки при движении вашего тела. У узла может быть несколько потомков, но только один родитель, таким образом образуя древовидную структуру. Эта структура известна как граф сцены .
В каждом кадре Sceneform отображает график сцены с точки зрения камеры (управляемый отслеживанием движения ARCore). Ваше приложение может взаимодействовать со сценой, прослушивая события прикосновений и жестов, выполняя тесты нажатия узлов и размещая привязки. Дополнительные сведения см. в разделе Создание сцены и взаимодействие со сценой .