Învață să dezvolți aplicații Android de realitate virtuală de la zero

Publicat: 2015-11-16

Acest articol vă va ghida despre cum să dezvoltați aplicații Android de realitate virtuală de la zero, presupunând că sunteți deja conștienți de elementele de bază ale dezvoltării aplicațiilor Android.

Cerințe

Angajați Freelancer pe Truelancer
  • Android Studio 1.0 sau o versiune ulterioară
  • Versiunea 19 a Android SDK
  • Un dispozitiv Android fizic care rulează Android 16 (Jelly Bean) sau o versiune superioară

Fișierul Manifest

 <manifest...

<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" />

<aplicare

...

<activitate

android:name=".MainActivity"

android:screenOrientation="landscape">

...

 

<filtru-intenție>

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

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

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

</intent-filter>

</activitate>

</aplicație>

</manifest>

Explicarea permisiunilor:

  • <uses-sdk android:minSdkVersion="16″/> indică faptul că dispozitivul trebuie să ruleze API Level 16 (Jellybean) sau mai mare.
  • <uses-sdk android:targetSdkVersion="19″/> indică că aplicația noastră vizează nivelul API 19 (KitKat).
  • <uses-feature android:glEsVersion=”0x00020000″ android:required=”true” /> indică faptul că aplicația folosește grafică și, prin urmare, trebuie să accepte OpenGL ES 2.0.
  • android:screenOrientation="landscape" indică faptul că orientarea pe ecran necesară activității este „peisaj”. Aceasta este orientarea pe care trebuie să o setați pentru aplicațiile VR. Vizualizarea utilizată de SDK-ul Cardboard, CardboardView, se redă numai în modurile pe ecran complet și peisaj (peisaj, peisaj invers, peisaj senzor).
  • Setarea android:configChanges="orientation|keyboardHidden" este de asemenea recomandată, dar nu obligatorie.
  • Permisiunea android.permission.NFC este necesară de cardboard SDK pentru a accesa eticheta NFC a Cardboard.
  • android.permission.READ_EXTERNAL_STORAGE și android.permission.WRITE_EXTERNAL_STORAGE . Aceste permisiuni sunt necesare de Cardboard SDK pentru a asocia telefonul utilizatorului cu vizualizatorul VR.
  • Aplicația noastră demonstrativă necesită permisiunea android.permission.VIBRATE pentru a face telefonul să vibreze pentru a informa utilizatorul că s-a întâmplat ceva.
  • Filtrul de intenție și, în special, com.google.intent.category.CARDBOARD afirmă că această activitate este compatibilă cu vizualizatoarele tip Cardboard. Această categorie este utilizată de aplicația Cardboard pentru a enumera aplicațiile compatibile instalate pe telefonul utilizatorului.

Extindeți activitatea de carton:

CardboardActivity este punctul de plecare pentru codarea unei aplicații de carton. CardboardActivity este activitatea de bază care oferă o integrare ușoară cu dispozitivele Cardboard. Expune evenimentele pentru a interacționa cu Cardboards și gestionează multe dintre detaliile solicitate în mod obișnuit atunci când se creează o activitate pentru redarea VR.

Trebuie să citiți succesul freelancing: Faceți cunoștință cu Aditya Web and Android Developer din Bangalore

Rețineți că CardboardActivity folosește modul sticky imersiv, în care interfața de utilizare a sistemului este ascunsă, iar conținutul ocupă întregul ecran. Aceasta este o cerință pentru o aplicație VR, deoarece CardboardView se va reda numai atunci când activitatea este în modul ecran complet.

Android 4.4 (API Level 19) introduce un nou indicator SYSTEM_UI_FLAG_IMMERSIVE pentru setSystemUiVisibility() care permite aplicației dvs. să devină cu adevărat „ecran complet”. Acest steag, atunci când este combinat cu steaguri SYSTEM_UI_FLAG_HIDE_NAVIGATION și SYSTEM_UI_FLAG_FULLSCREEN, ascunde barele de navigare și stare și permite aplicației dvs. să captureze toate evenimentele tactile de pe ecran.

Definiți un CardBoardView:

Toate elementele interfeței cu utilizatorul dintr-o aplicație Android sunt construite folosind vizualizări. Cardboard SDK pentru Android oferă propria sa vizualizare, CardboardView, care este o extensie convenabilă a GLSurfaceView care poate fi utilizată pentru randarea VR. CardboardView redă conținutul în stereo. Puteți vedea cum aplicația demo definește aCardboardView în fișierul xml de aspect al activității în următorul mod:

 <com.google.vrtoolkit.cardboard.CardboardView    
android:fill_parent"    
android:layout_height="fill_parent" />

Apoi, în clasa de activitate principală, inițializează CardboardView în metoda onCreate():

 **
* Setează vizualizarea la CardboardView și inițializează matricele de transformare pe care le vom folosi
* pentru a ne reda scena. 
* @param savedInstanceState 
*/
@Trece peste
public void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.common_ui);    
CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);    
// Asociați un CardboardView.StereoRenderer cu cardboardView.    
cardboardView.setRenderer(this);    
// Asociați cardboardView cu această activitate.    
setCardboardView(cardboardView);     
// Inițializați alte obiecte aici
....
}

Redați vizualizarea

Odată ce obțineți CardboardView, îl asociați cu un renderer și apoi asociați CardboardView cu activitatea. Cardboard acceptă două tipuri de randare, dar cea mai rapidă modalitate de a începe este utilizarea CardboardView.StereoRenderer, care este ceea ce folosește aplicația demo.

CardboardView.StereoRenderer include aceste metode cheie:

  • onNewFrame(), apelat de fiecare dată când acea aplicație este redată.
  • onDrawEye(), apelat pentru fiecare ochi cu parametri ochi diferiți.
Trebuie să citiți Cum să angajați un dezvoltator Wordpress și să vă pregătiți site-ul

Implementarea acestora este similară cu ceea ce ați face în mod normal pentru o aplicație OpenGL. Aceste metode sunt discutate mai detaliat în secțiunile următoare.

Implementați onNewFrame

Utilizați metoda onNewFrame() pentru a codifica logica de randare înainte ca fiecare ochi să fie randat. Orice operațiuni pe cadru care nu sunt specifice unei singure vizualizări ar trebui să aibă loc aici. Acesta este un loc bun pentru a vă actualiza modelul. În acest fragment, variabila mHeadView conține poziția capului. Această valoare trebuie salvată pentru a fi utilizată mai târziu pentru a spune dacă utilizatorul se uită la comoară:

 /**

* Pregătește OpenGL ES înainte de a desena un cadru.

* @param headTransform Transformarea capului în noul cadru.

*/

@Trece peste

public void onNewFrame(HeadTransform headTransform) {

...

headTransform.getHeadView(mHeadView, 0);

...

}

Implementați onDrawEye

Implementați onDrawEye() pentru a efectua configurarea pe ochi.

Aceasta este carnea codului de randare și foarte asemănătoare cu construirea unei aplicații obișnuite OpenGL ES2. Următorul fragment arată cum să obțineți matricea de transformare a vizualizării și, de asemenea, matricea de transformare a perspectivei. Trebuie să vă asigurați că randați cu o latență scăzută. Obiectul Eye conține matricele de transformare și proiecție pentru ochi. Aceasta este succesiunea evenimentelor:

  • Comoara intră în spațiul ochilor.
  • Aplicam matricea de proiectie. Aceasta oferă scena redată pentru ochiul specificat.
  • Cardboard SDK aplică automat distorsiunea, pentru a reda scena finală.
 /**

* Desenează un cadru pentru un ochi.

*

* @param eye Ochiul de redat. Include toate transformările necesare.

*/

@Trece peste

public void onDrawEye(ochiul ochiului) {

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

...

// Aplicați transformarea ochiului pe cameră.

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

 

// Setați poziția luminii

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

 

// Construiește matricele ModelView și ModelViewProjection

// pentru calcularea poziției cubului și a luminii.

float[] perspective = eye.getPerspective(Z_NEAR, Z_FAR);

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

Matrix.multiplyMM(mModelViewProjection, 0, perspectiva, 0, mModelView, 0);

drawCube();

 

// Desenează restul scenei.

...

}

Manipularea intrărilor

Vizualizatorul Cardboard include un buton care folosește un magnet. Când apăsați magnetul, câmpul magnetic se modifică și este detectat de magnetometrul telefonului dvs. Aceste evenimente magnet sunt detectate de Cardboard SDK pentru dvs.

Trebuie să citiți tutorialul Truelancer Workflow pentru angajatori

Pentru a oferi un comportament personalizat atunci când utilizatorul trage magnetul, înlocuiți CardboardActivity.onCardboardTrigger() în activitatea aplicației dvs. În aplicația de vânătoare de comori, dacă ați găsit comoara și trageți magnetul, puteți păstra comoara:

 /**

* Creșteți scorul, ascundeți obiectul și oferiți feedback dacă utilizatorul trage magnetul în timp ce

* Privind obiectul. În caz contrar, reamintiți utilizatorului ce trebuie să facă.

*/

@Trece peste

public void onCardboardTrigger() {

dacă (esteLookingAtObject()) {

mScore++;

mOverlayView.show3DToast("Am găsit! Căutați încă unul.\nScore = " + mScore);

...

} altfel {

mOverlayView.show3DToast(„Uită-te în jur pentru a găsi obiectul!”);

}

// Oferiți întotdeauna feedback utilizatorului

mVibrator.vibrate(50);

}

Începeți propriul proiect

Acum că sunteți mai familiarizat cu Cardboard SDK pentru Android, este timpul să vă creați propriile aplicații.

Fie că este un proiect nou pe care îl porniți de la zero sau unul existent, iată ce ar trebui să faceți.

1) Descărcați cele două fișiere JAR. Click aici pentru a descarca

2) Copiați și inserați-l în folderul aplicație/libs (Găsiți-l în vizualizarea Proiect din Structura proiectului Android Studio)

3) Faceți clic dreapta pe biblioteci și selectați „Adăugați ca bibliotecă”

Apoi, asigurați-vă că următoarele linii sunt prezente în fișierul app/build.gradle al proiectului dvs.:

dependențe { … compilați arborele de fișiere (dir: 'libs', include: ['*.jar']) }

Ești gata să dai un început de drum dezvoltării aplicației de realitate virtuală!

Ești un dezvoltator Android? Alăturați-vă Truelancer astăzi și începeți să lucrați independent

Angajați Freelancer pe Truelancer