fbpx

Huawei AR Engine: базовые приемы работы

Друзья, мы рады анонсировать наше долгосрочное сотрудничество с компании 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 находится тут