
Друзья, мы рады анонсировать наше долгосрочное сотрудничество с компании Huawei, которые известны не только как один из главных мировых производителей самых разных технических новинок: от смартфонов до профессиональных промышленных систем связи, но и разработчики перспективной платформы дополненной реальности Huawei AR Engine.
С этого дня на нашем сайте будут регулярно обновляться полезный блог Huawei и сегодня мы начнем с первой статьи о AR Engine. Мы рассмотрим самые базовые приемы работы с этим сервисом и буквально за 10 минут напишем свой собственный “Hello World!”.
Начнем мы, как ни странно, не с самого AR Engine, а с его лайт-версии, входящей в состав Scene Kit. Scene Kit был создан для быстрого и легкого отображения трехмерной графики внутри приложения в случаях, когда не требуется сложных манипуляций с трехмерными сценами. По сути Scene Kit это легких трехмерный движок, включающим две важные функции из AR Engine — наложение трехмерного объекта на человеческое лицо (прием также известный как “маски”) и размещение трехмерного объекта в окружающем мире. Сегодня поговорим про вторую функцию — она станет хорошей отправной точкой для перехода к “взрослой” AR Engine. В результате у нас получится что-то вроде такого несложного примера дополненной реальности:
Для данного проекта нам понадобятся:
— Android Studio 4.0 или более новый.
— JDK 1.7 или более новый.
— Телефон или планшет от Huawei или Honor. Список поддерживаемых моделей: серия P: P30 / P30Pro / P40 / P40Pro / P40Pro +, серия Mate: Mate20 / Mate20Pro / Mate20RS / Mate 20X / Mate20X (5G) / Mate30 / Mate30Pro / Mate30RS / Mate30 (5G) / Mate30Pro (5G) / Mate X / Mate XS, серия Nova: Nova6 / Nova6-5G / Nova7 / Nova7Pro, серия Honor: Honor V20 / Honor 20 / Honor 20Pro / Honor V30 / Honor V30Pro / Honor 30S / Honor 30 Pro / Honor 30 Pro + / Honor 10 X Lite, серия планшетов: Tablet M6.
Создадим новый Java-проект в Android Studio. Первое, что нам нужно сделать – добавить Scene Kit в наш проект. Сначала нужно добавить maven-репозитории в build.gradle проекта:
buildscript { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } } allprojects { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } }
Затем в build.gradle приложения нужно добавить сам Scene Kit:
dependency { implementation 'com.huawei.scenekit:full-sdk:{version}' }
Вместо {version} нужно указать актуальную версию SDK. Посмотреть ее можно вот здесь.
Android Studio сама скачает SDK, указанный в dependency из одного из репозиториев указанных в repositories.
Создадим наше активити:
public class ARViewActivity extends Activity { private ARView mARView; private Button mButton; private boolean isLoadResource = false; }
В layout добавляем ARView и кнопку:
<com.huawei.hms.scene.sdk.ARView android:id="@+id/ar_view" android:layout_width="match_parent" android:layout_height="match_parent"> ... <Button … android:id="@+id/button" android:onClick="onBtnClicked"> </Button>
В методе onCreate нашего активити инициализируем ARView и кнопку, включаем отображение плоскостей:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ar_view); mARView = findViewById(R.id.ar_view); mButton = findViewById(R.id.button); mARView.enablePlaneDisplay(true); }
Далее делаем так, чтобы по нажатию кнопки можно было загрузить нашу модель в сцену:
public void onBtnClicked(View view) { mARView.loadAsset("ARView/scene.gltf"); float[] scale = new float[] { 0.1f, 0.1f, 0.1f }; float[] rotation = new float[] { 0.707f, 0.0f, -0.707f, 0.0f }; mARView.setInitialPose(scale, rotation); }
Модель должна быть предварительно размещена в папке assets в формате .gltf/.glb. Любой современный трехмерный редактор умеет экспортировать модели в данном формате. Если же свою модель делать лень, то можно купить или скачать модели бесплатно с ресурсов типа www.sketchfab.com или www.www.turbosquid.com
С помощью setInitialPose можно выставить изначальную ориентацию и масштаб модели.
Теперь осталось только переопределить методы onPause(), onResume() и onDestroy():
@Override protected void onPause() { super.onPause(); mARView.onPause(); } @Override protected void onResume() { super.onResume(); mARView.onResume(); } @Override protected void onDestroy() { super.onDestroy(); mARView.destroy(); }
После этого приложение можно запускать. Сразу после запуска ARView нужно некоторое время, чтобы найти плоскоти в окружающем мире – если включена соответствующая опция они отобразятся на экран. Далее остается только нажать на кнопку загрузки модели а потом нажать на одну из плоскостей, чтобы модель появилась на ней. Моделью можно управлять – для этого выделите ее, нажатием пальца и перемещайте, масштабируйте пинчем или поворачивайте двумя пальцами.
Это простое приложение можно легко использовать, например, для размещения в дополненной реальности в настоящих интерьерах бытовой техники, мебели и даже… целых домов! Примерно вот так:
Готовый пример приложения можно найти вот здесь.
Документация к Scene Kit находится тут.