Naucz się tworzyć od podstaw aplikacje na Androida działające w wirtualnej rzeczywistości

Opublikowany: 2015-11-16

W tym artykule dowiesz się, jak tworzyć od podstaw aplikacje wirtualnej rzeczywistości na Androida, zakładając, że znasz już podstawy tworzenia aplikacji na Androida.

Wymagania

Zatrudnij Freelancera na Truelancer
  • Android Studio 1.0 lub nowszy
  • Wersja 19 pakietu Android SDK
  • Fizyczne urządzenie z systemem Android 16 (Jelly Bean) lub nowszym

Plik manifestu

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

<aplikacja

...

<aktywność

android:nazwa=".Aktywność główna"

android:screenOrientation="landscape">

...

 

<filtr intencji>

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

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

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

</intent-filter>

</aktywność>

</aplikacja>

</manifest>

Wyjaśnienie uprawnień:

  • <uses-sdk android:minSdkVersion=”16″/> wskazuje, że urządzenie musi działać na poziomie API 16 (Jellybean) lub wyższym.
  • <uses-sdk android:targetSdkVersion=”19″/> wskazuje, że nasza aplikacja jest ukierunkowana na API Level 19 (KitKat).
  • <uses-feature android:glEsVersion=”0x00020000″ android:required=”true” /> wskazuje, że aplikacja używa grafiki i dlatego musi obsługiwać OpenGL ES 2.0.
  • android:screenOrientation="landscape" wskazuje, że wymagana orientacja ekranu działania to "landscape". To jest orientacja, którą musisz ustawić dla aplikacji VR. Widok używany przez Cardboard SDK CardboardView jest renderowany tylko w trybach pełnoekranowych i poziomych (poziomy, reverseLandscape, sensorLandscape).
  • Ustawienie android:configChanges="orientation|keyboardHidden" jest również zalecane, ale nie obowiązkowe.
  • Uprawnienie android.permission.NFC jest wymagane przez Cardboard SDK, aby uzyskać dostęp do tagu NFC Cardboard.
  • android.permission.READ_EXTERNAL_STORAGE i android.permission.WRITE_EXTERNAL_STORAGE . Te uprawnienia są wymagane przez pakiet Cardboard SDK, aby sparować telefon użytkownika z goglami VR.
  • Uprawnienie android.permission.VIBRATE jest wymagane przez naszą aplikację demonstracyjną, aby telefon wibrował, informując użytkownika, że ​​coś się stało.
  • Filtr intencji, a konkretnie com.google.intent.category.CARDBOARD , stwierdzają, że ta aktywność jest zgodna z goglami podobnymi do Cardboard. Ta kategoria jest używana przez aplikację Cardboard do wyświetlania zgodnych aplikacji zainstalowanych na telefonie użytkownika.

Rozszerz aktywność Cardboard:

CardboardActivity to punkt wyjścia do kodowania aplikacji kartonowej. CardboardActivity to podstawowa aktywność, która zapewnia łatwą integrację z urządzeniami Cardboard. Udostępnia zdarzenia do interakcji z Cardboards i obsługuje wiele szczegółów zwykle wymaganych podczas tworzenia aktywności do renderowania VR.

Koniecznie przeczytaj o sukcesie freelancingu: poznaj Aditya Web and Android Developer z Bangalore

Zwróć uwagę, że CardboardActivity używa przyklejonego trybu immersyjnego, w którym interfejs systemu jest ukryty, a zawartość zajmuje cały ekran. Jest to wymagane w przypadku aplikacji VR, ponieważ CardboardView będzie renderować się tylko wtedy, gdy aktywność jest w trybie pełnoekranowym.

Android 4.4 (API Level 19) wprowadza nową flagę SYSTEM_UI_FLAG_IMMERSIVE dla funkcji setSystemUiVisibility(), która pozwala Twojej aplikacji przejść na naprawdę „pełny ekran”. Ta flaga w połączeniu z flagami SYSTEM_UI_FLAG_HIDE_NAVIGATION i SYSTEM_UI_FLAG_FULLSCREEN ukrywa paski nawigacji i stanu oraz umożliwia aplikacji przechwytywanie wszystkich zdarzeń dotykowych na ekranie.

Zdefiniuj CardBoardView:

Wszystkie elementy interfejsu użytkownika w aplikacji dla systemu Android są budowane przy użyciu widoków. Zestaw Cardboard SDK dla systemu Android udostępnia własny widok CardboardView, który jest wygodnym rozszerzeniem GLSurfaceView, którego można używać do renderowania VR. CardboardView renderuje zawartość w stereo. Możesz zobaczyć, jak aplikacja demonstracyjna definiuje aCardboardView w pliku XML układu aktywności w następujący sposób:

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

Następnie w głównej klasie aktywności inicjuje CardboardView w metodzie onCreate():

 **
* Ustawia widok na nasz CardboardView i inicjuje macierze transformacji, których będziemy używać
* do renderowania naszej sceny. 
* @param zapisany stan instancji 
*/
@Nadpisanie
public void onCreate(Bundle saveInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.common_ui);    
CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);    
// Powiąż CardboardView.StereoRenderer z cardboardView.    
kartonWidok.setRenderer(to);    
// Powiąż element cardboardView z tym działaniem.    
setCardboardView(cardboardView);     
// Zainicjuj tutaj inne obiekty
....
}

Renderuj widok

Po uzyskaniu CardboardView skojarzysz go z modułem renderującym, a następnie skojarzysz theCardboardView z działaniem. Cardboard obsługuje dwa rodzaje rendererów, ale najszybszym sposobem na rozpoczęcie jest użycie CardboardView.StereoRenderer, którego używa aplikacja demonstracyjna.

CardboardView.StereoRenderer zawiera te kluczowe metody:

  • onNewFrame(), wywoływana przy każdym renderowaniu aplikacji.
  • onDrawEye(), wywoływana dla każdego oka z różnymi parametrami oka.
Musisz przeczytać Jak zatrudnić programistę Wordpress i przygotować swoją stronę internetową

Ich implementacja jest podobna do tego, co normalnie robisz dla aplikacji OpenGL. Te metody zostały szczegółowo omówione w kolejnych sekcjach.

Zaimplementuj w NewFrame

Użyj metody onNewFrame(), aby zakodować logikę renderowania przed renderowaniem poszczególnych oczu. W tym miejscu powinny mieć miejsce wszelkie operacje na klatkę, które nie są specyficzne dla pojedynczego widoku. To dobre miejsce na aktualizację modelu. W tym fragmencie zmienna mHeadView zawiera pozycję nagłówka. Tę wartość należy zapisać, aby użyć później, aby stwierdzić, czy użytkownik szuka skarbu:

 /**

* Przygotowuje OpenGL ES przed narysowaniem ramki.

* @param headTransform Transformacja głowy w nowej ramce.

*/

@Nadpisanie

public void onNewFrame(HeadTransform headTransform) {

...

headTransform.getHeadView(mHeadView, 0);

...

}

Implementuj na DrawEye

Zaimplementuj onDrawEye(), aby wykonać konfigurację każdego oka.

To jest mięso kodu renderującego i jest bardzo podobne do budowania zwykłej aplikacji OpenGL ES2. Poniższy fragment kodu pokazuje, jak uzyskać macierz transformacji widoku, a także macierz transformacji perspektywy. Musisz upewnić się, że renderujesz z małym opóźnieniem. Obiekt Oko zawiera macierze transformacji i projekcji dla oka. Oto sekwencja wydarzeń:

  • Skarb wchodzi w przestrzeń oczu.
  • Stosujemy macierz projekcji. Zapewnia to scenę renderowaną dla określonego oka.
  • Cardboard SDK automatycznie stosuje zniekształcenia, aby renderować końcową scenę.
 /**

* Rysuje ramkę na oko.

*

* @param eye Oko do renderowania. Zawiera wszystkie wymagane przekształcenia.

*/

@Nadpisanie

public void onDrawEye(Eye eye) {

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

...

// Zastosuj transformację oka do kamery.

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

 

// Ustaw pozycję światła

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

 

// Zbuduj macierze ModelView i ModelViewProjection

// do obliczania pozycji sześcianu i światła.

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

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

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

DrawCube();

 

// Narysuj resztę sceny.

...

}

Obsługa wejść

Przeglądarka Cardboard zawiera przycisk, który wykorzystuje magnes. Po naciśnięciu magnesu pole magnetyczne zmienia się i jest wykrywane przez magnetometr telefonu. Te zdarzenia magnesów są wykrywane przez pakiet Cardboard SDK.

Musisz przeczytać samouczek dotyczący przepływu pracy Truelancer dla pracodawców

Aby zapewnić niestandardowe zachowanie, gdy użytkownik pociągnie magnes, overrideCardboardActivity.onCardboardTrigger() w aktywności aplikacji. W aplikacji do poszukiwania skarbów, jeśli znalazłeś skarb i pociągniesz magnes, możesz zatrzymać skarb:

 /**

* Zwiększ wynik, ukryj obiekt i przekaż informację zwrotną, jeśli użytkownik pociągnie magnes podczas

* patrzenie na obiekt. W przeciwnym razie przypomnij użytkownikowi, co ma zrobić.

*/

@Nadpisanie

public void onCardboardTrigger() {

if (isLookingAtObject()) {

mWynik++;

mOverlayView.show3DToast("Znalazłem! Rozejrzyj się za innym.\nScore = " + mScore);

...

} w przeciwnym razie {

mOverlayView.show3DToast("Rozejrzyj się, aby znaleźć obiekt!");

}

// Zawsze przekazuj opinie użytkowników

mWibrator.wibruj(50);

}

Rozpocznij własny projekt

Teraz, gdy znasz już pakiet Cardboard SDK dla systemu Android, nadszedł czas na tworzenie własnych aplikacji.

Niezależnie od tego, czy jest to nowy projekt, który zaczynasz od zera, czy już istniejący, oto, co powinieneś zrobić.

1) Pobierz dwa pliki JAR. Kliknij tutaj, aby pobrać

2) Skopiuj i wklej go do folderu app/libs (znajdź to w widoku projektu w Android Studio Project Structure)

3) Kliknij prawym przyciskiem myszy biblioteki i wybierz „Dodaj jako bibliotekę”

Następnie upewnij się, że w pliku app/build.gradle projektu znajdują się następujące wiersze:

zależności { … kompiluj fileTree(dir: 'libs', include: ['*.jar']) }

Jesteś gotowy, aby rozpocząć tworzenie aplikacji wirtualnej rzeczywistości!

Czy jesteś programistą Androida? Dołącz do Truelancera już dziś i zacznij freelancing

Zatrudnij Freelancera na Truelancer