Научитесь разрабатывать приложения виртуальной реальности для Android с нуля

Опубликовано: 2015-11-16

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

Требования

Нанять фрилансера на Truelancer
  • Android Studio 1.0 или выше
  • Android SDK версии 19
  • Физическое устройство Android под управлением Android 16 (Jelly Bean) или выше.

Файл манифеста

 <манифест...

<uses-permission android:name="android.permission.NFC" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

<uses-permission android:name="android.permission.VIBRATE" />

...

<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="19"/>

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

<приложение

...

<активность

андроид: имя = ".MainActivity"

Android: screenOrientation="пейзаж">

...

 

<намерение-фильтр>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

<category android:name="com.google.intent.category.CARDBOARD" />

</интент-фильтр>

</активность>

</приложение>

</манифест>

Объяснение разрешений:

  • <uses-sdk android:minSdkVersion=”16″/> указывает, что устройство должно работать под управлением API уровня 16 (Jellybean) или выше.
  • <uses-sdk android:targetSdkVersion="19"/> указывает, что наше приложение нацелено на уровень API 19 (KitKat).
  • <uses-feature android:glEsVersion=”0x00020000″ android:required=”true” /> указывает, что приложение использует графику и поэтому должно поддерживать OpenGL ES 2.0.
  • android:screenOrientation="landscape" указывает, что для действия требуется ориентация экрана "альбомная". Это ориентация, которую вы должны установить для приложений VR. Представление, используемое Cardboard SDK, CardboardView, отображается только в полноэкранном и альбомном режимах (альбомный, reverseLandscape, sensorLandscape).
  • Параметр android:configChanges="orientation|keyboardHidden" также рекомендуется, но не обязателен.
  • Разрешение android.permission.NFC требуется Cardboard SDK для доступа к тегу Cardboard NFC.
  • android.permission.READ_EXTERNAL_STORAGE и android.permission.WRITE_EXTERNAL_STORAGE . Эти разрешения требуются Cardboard SDK для сопряжения телефона пользователя со средством просмотра виртуальной реальности.
  • Разрешение android.permission.VIBRATE требуется нашему демонстрационному приложению, чтобы заставить телефон вибрировать, чтобы сообщить пользователю, что что-то произошло.
  • Фильтр намерений и, в частности, com.google.intent.category.CARDBOARD заявляют, что это действие совместимо со средствами просмотра, подобными Cardboard. Эта категория используется приложением Cardboard для списка совместимых приложений, установленных на телефоне пользователя.

Продлить активность картона:

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

Должен прочитать Успех фрилансера: познакомьтесь с Aditya Web и Android-разработчиком из Бангалора

Обратите внимание, что CardboardActivity использует липкий иммерсивный режим, в котором системный пользовательский интерфейс скрыт, а содержимое занимает весь экран. Это требование для VR-приложения, поскольку CardboardView будет отображаться только тогда, когда действие находится в полноэкранном режиме.

Android 4.4 (уровень API 19) представляет новый флаг SYSTEM_UI_FLAG_IMMERSIVE для setSystemUiVisibility(), который позволяет вашему приложению работать в полноэкранном режиме. Этот флаг в сочетании с флагами SYSTEM_UI_FLAG_HIDE_NAVIGATION и SYSTEM_UI_FLAG_FULLSCREEN скрывает навигацию и строки состояния и позволяет вашему приложению фиксировать все сенсорные события на экране.

Определите CardBoardView:

Все элементы пользовательского интерфейса в приложении для Android создаются с использованием представлений. Cardboard SDK для Android предоставляет собственное представление CardboardView, удобное расширение GLSurfaceView, которое можно использовать для рендеринга виртуальной реальности. CardboardView отображает содержимое в стереофоническом режиме. Вы можете увидеть, как демонстрационное приложение определяет aCardboardView в XML-файле макета активности следующим образом:

 <com.google.vrtoolkit.cardboard.CardboardView    
андроид: fill_parent"    
android:layout_height="fill_parent" />

Затем в основном классе активности он инициализирует CardboardView в методе onCreate():

 **
* Устанавливает представление в наш CardboardView и инициализирует матрицы преобразования, которые мы будем использовать
* для визуализации нашей сцены. 
* @param saveInstanceState 
*/
@Override
public void onCreate (Bundle saveInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView (R.layout.common_ui);    
CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);    
// Свяжите CardboardView.StereoRenderer с картонным представлением.    
картонView.setRenderer(этот);    
// Свяжите картонView с этой активностью.    
setCardboardView (картонный вид);     
// Здесь инициализируем другие объекты
....
}

Рендеринг вида

Получив CardboardView, вы связываете его с средством визуализации, а затем связываете CardboardView с активностью. Cardboard поддерживает два типа визуализаторов, но самый быстрый способ начать работу — использовать CardboardView.StereoRenderer, который используется в демонстрационном приложении.

CardboardView.StereoRenderer включает следующие ключевые методы:

  • onNewFrame(), вызываемый каждый раз, когда это приложение отрисовывается.
  • onDrawEye(), вызываемый для каждого глаза с разными параметрами глаза.
Обязательно прочитайте , как нанять разработчика Wordpress и подготовить свой сайт

Их реализация аналогична тому, что вы обычно делаете для приложения OpenGL. Эти методы более подробно обсуждаются в следующих разделах.

Реализовать onNewFrame

Используйте метод onNewFrame() для кодирования логики рендеринга перед рендерингом отдельных глаз. Здесь должны выполняться любые операции с кадром, не относящиеся к одному представлению. Это хорошее место для обновления вашей модели. В этом фрагменте переменная mHeadView содержит положение головы. Это значение необходимо сохранить, чтобы использовать его позже, чтобы узнать, смотрит ли пользователь на сокровище:

 /**

* Подготавливает OpenGL ES, прежде чем мы нарисуем кадр.

* @param headTransform Трансформация головы в новом кадре.

*/

@Override

public void onNewFrame (HeadTransform headTransform) {

...

headTransform.getHeadView (mHeadView, 0);

...

}

Реализовать наDrawEye

Реализуйте onDrawEye() для выполнения конфигурации для каждого глаза.

Это основная часть кода рендеринга, очень похожая на создание обычного приложения OpenGL ES2. В следующем фрагменте показано, как получить матрицу преобразования вида, а также матрицу преобразования перспективы. Вам нужно убедиться, что вы выполняете рендеринг с низкой задержкой. Объект Eye содержит матрицы преобразования и проекции для глаза. Это последовательность событий:

  • Сокровище попадает в пространство глаз.
  • Применяем матрицу проекции. Это обеспечивает визуализацию сцены для указанного глаза.
  • Cardboard SDK автоматически применяет искажение для рендеринга финальной сцены.
 /**

* Рисует рамку для глаза.

*

* @param eye Глаз для рендеринга. Включает в себя все необходимые преобразования.

*/

@Override

public void onDrawEye (глаз глаз) {

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

...

// Применяем преобразование глаза к камере.

Matrix.multiplyMM(mView, 0, eye.getEyeView(), 0, mCamera, 0);

 

// Устанавливаем положение источника света

Matrix.multiplyMV(mLightPosInEyeSpace, 0, mView, 0, LIGHT_POS_IN_WORLD_SPACE, 0);

 

// Строим матрицы ModelView и ModelViewProjection

// для расчета положения куба и света.

float [] перспектива = eye.getPerspective (Z_NEAR, Z_FAR);

Matrix.multiplyMM(mModelView, 0, mView, 0, mModelCube, 0);

Matrix.multiplyMM(mModelViewProjection, 0, перспектива, 0, mModelView, 0);

нарисоватьКуб();

 

// Рисуем остальную часть сцены.

...

}

Обработка входных данных

Средство просмотра Cardboard включает в себя кнопку, в которой используется магнит. Когда вы нажимаете на магнит, магнитное поле изменяется и регистрируется магнитометром вашего телефона. Эти магнитные события обнаруживаются Cardboard SDK.

Обязательный к прочтению учебник по рабочему процессу Truelancer для работодателей

Чтобы обеспечить пользовательское поведение, когда пользователь тянет магнит, переопределите CardboardActivity.onCardboardTrigger() в активности вашего приложения. В приложении поиска сокровищ, если вы нашли сокровище и потянули магнит, вы можете сохранить сокровище:

 /**

* Увеличивайте счет, скрывайте объект и давайте обратную связь, если пользователь тянет магнит во время

* глядя на объект. В противном случае напомните пользователю, что делать.

*/

@Override

public void onCardboardTrigger() {

если (ищет объект()) {

mScore++;

mOverlayView.show3DToast("Нашел! Поищите еще один.\nScore = " + mScore);

...

} еще {

mOverlayView.show3DToast("Оглянитесь, чтобы найти объект!");

}

// Всегда давать обратную связь пользователю

mVibrator.vibrate(50);

}

Начните свой собственный проект

Теперь, когда вы лучше знакомы с Cardboard SDK для Android, пришло время создавать собственные приложения.

Будь то новый проект, который вы начинаете с нуля, или уже существующий, вот что вам следует сделать.

1) Загрузите два файла JAR. Нажмите сюда для того, чтобы скачать

2) Скопируйте и вставьте его в папку app/libs (найдите это в представлении проекта структуры проекта Android Studio)

3) Щелкните правой кнопкой мыши библиотеки и выберите «Добавить как библиотеку».

Затем убедитесь, что в файле app/build.gradle вашего проекта присутствуют следующие строки:

зависимости { … скомпилировать дерево файлов (каталог: 'libs', включить: ['*.jar']) }

Вы готовы дать толчок разработке приложений для виртуальной реальности!

Вы Android-разработчик? Присоединяйтесь к Truelancer сегодня и начните работать фрилансером

Нанять фрилансера на Truelancer