Belajar Mengembangkan Aplikasi Android Virtual Reality dari Awal

Diterbitkan: 2015-11-16

Artikel ini akan memandu Anda tentang cara mengembangkan Aplikasi Android Virtual Reality dari awal, dengan asumsi bahwa Anda sudah mengetahui dasar-dasar pengembangan Aplikasi Android.

Persyaratan

Pekerjakan Freelancer di Truelancer
  • Android Studio 1.0 atau lebih tinggi
  • Versi 19 Android SDK
  • Perangkat Android fisik yang menjalankan Android 16 (Jelly Bean) atau Lebih Tinggi

File Manifes

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

<aplikasi

...

<aktivitas

android:nama=".Aktivitas Utama"

android:screenOrientation="landscape">

...

 

<intent-filter>

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

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

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

</intent-filter>

</aktivitas>

</aplikasi>

</manifest>

Menjelaskan izin:

  • <uses-sdk android:minSdkVersion="16″/> menunjukkan bahwa perangkat harus menjalankan API Level 16 (Jellybean) atau lebih tinggi.
  • <uses-sdk android:targetSdkVersion="19″/> menunjukkan aplikasi kami menargetkan API Level 19 (KitKat).
  • <uses-feature android:glEsVersion=”0x00020000″ android:required=”true” /> menunjukkan bahwa aplikasi menggunakan grafik sehingga harus mendukung OpenGL ES 2.0.
  • android:screenOrientation="landscape" menunjukkan bahwa orientasi layar yang diperlukan aktivitas adalah "landscape". Ini adalah orientasi yang harus Anda atur untuk aplikasi VR. Tampilan yang digunakan oleh Cardboard SDK, CardboardView, hanya dirender pada mode layar penuh dan lanskap (lanskap, reverseLandscape, sensorLandscape).
  • Pengaturan android:configChanges="orientation|keyboardHidden" juga disarankan, tetapi tidak wajib.
  • izin android.permission.NFC diperlukan oleh Cardboard SDK untuk mengakses tag NFC Cardboard.
  • android.permission.READ_EXTERNAL_STORAGE dan android.permission.WRITE_EXTERNAL_STORAGE . Izin ini diperlukan oleh Cardboard SDK untuk memasangkan ponsel pengguna ke penampil VR mereka.
  • izin android.permission.VIBRATE diperlukan oleh aplikasi demo kami untuk membuat ponsel bergetar untuk memberi tahu pengguna bahwa sesuatu telah terjadi.
  • Filter maksud dan khususnya com.google.intent.category.CARDBOARD menyatakan bahwa aktivitas ini kompatibel dengan pemirsa seperti Cardboard. Kategori ini digunakan oleh aplikasi Cardboard untuk mendaftar aplikasi kompatibel yang terpasang di ponsel pengguna.

Perluas Aktivitas Karton:

CardboardActivity adalah titik awal untuk mengkodekan aplikasi kardus. CardboardActivity adalah aktivitas dasar yang menyediakan integrasi mudah dengan perangkat Cardboard. Ini memaparkan peristiwa untuk berinteraksi dengan Cardboards dan menangani banyak detail yang biasanya diperlukan saat membuat aktivitas untuk rendering VR.

Harus Membaca Sukses Freelancing: Temui Aditya Web dan Pengembang Android dari Bangalore

Perhatikan bahwa CardboardActivity menggunakan mode imersif yang melekat, di mana UI sistem disembunyikan, dan konten memenuhi seluruh layar. Ini adalah persyaratan untuk aplikasi VR, karena CardboardView hanya akan dirender saat aktivitas dalam mode layar penuh.

Android 4.4 (API Level 19) memperkenalkan tanda SYSTEM_UI_FLAG_IMMERSIVE baru untuk setSystemUiVisibility() yang memungkinkan aplikasi Anda benar-benar "layar penuh". Bendera ini, bila digabungkan dengan bendera SYSTEM_UI_FLAG_HIDE_NAVIGATION dan SYSTEM_UI_FLAG_FULLSCREEN, menyembunyikan bilah navigasi dan status dan memungkinkan aplikasi Anda menangkap semua peristiwa sentuh di layar.

Tentukan CardBoardView:

Semua elemen antarmuka pengguna dalam aplikasi Android dibuat menggunakan tampilan. Cardboard SDK untuk Android menyediakan tampilannya sendiri, CardboardView, yang merupakan ekstensi kenyamanan GLSurfaceView yang dapat digunakan untuk rendering VR. CardboardView merender konten dalam stereo. Anda dapat melihat bagaimana aplikasi demo mendefinisikan aCardboardView ke dalam file xml tata letak aktivitasnya dengan cara berikut:

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

Kemudian di kelas aktivitas utama ini menginisialisasi CardboardView dalam metode onCreate():

 **
* Menyetel tampilan ke CardboardView kami dan menginisialisasi matriks transformasi yang akan kami gunakan
* untuk membuat adegan kami. 
* @param disimpanInstanceState 
*/
@Mengesampingkan
public void onCreate(Bundle saveInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.common_ui);    
CardboardView CardboardView = (CardboardView) findViewById(R.id.cardboard_view);    
// Kaitkan CardboardView.StereoRenderer dengan CardboardView.    
kartonView.setRenderer(ini);    
// Kaitkan kartonView dengan aktivitas ini.    
setCardboardView(cardboardView);     
// Inisialisasi objek lain di sini
....
}

Render tampilan

Setelah Anda mendapatkan CardboardView, Anda mengaitkannya dengan perender, dan kemudian Anda mengaitkan CardboardView dengan aktivitas tersebut. Cardboard mendukung dua jenis perender, tetapi cara tercepat untuk memulai adalah menggunakan CardboardView.StereoRenderer, yang digunakan oleh aplikasi demo.

CardboardView.StereoRenderer menyertakan metode utama ini:

  • onNewFrame(), dipanggil setiap kali aplikasi itu dirender.
  • onDrawEye(), memanggil setiap mata dengan parameter mata yang berbeda.
Harus Baca Cara Menyewa Pengembang Wordpress dan Siapkan Situs Web Anda

Menerapkan ini mirip dengan apa yang biasanya Anda lakukan untuk aplikasi OpenGL. Metode-metode ini dibahas secara lebih rinci di bagian berikut.

Terapkan diNewFrame

Gunakan metode onNewFrame() untuk mengkodekan logika rendering sebelum mata individu dirender. Operasi per-bingkai apa pun yang tidak spesifik untuk satu tampilan harus terjadi di sini. Ini adalah tempat yang baik untuk memperbarui model Anda. Dalam cuplikan ini, variabel mHeadView berisi posisi kepala. Nilai ini perlu disimpan untuk digunakan nanti untuk mengetahui apakah pengguna sedang melihat harta karun:

 /**

* Mempersiapkan OpenGL ES sebelum kita menggambar bingkai.

* @param headTransform Transformasi kepala dalam bingkai baru.

*/

@Mengesampingkan

public void onNewFrame(HeadTransform headTransform) {

...

headTransform.getHeadView(mHeadView, 0);

...

}

Terapkan onDrawEye

Terapkan onDrawEye() untuk melakukan konfigurasi per-mata.

Ini adalah inti dari kode rendering, dan sangat mirip dengan membangun aplikasi OpenGL ES2 biasa. Cuplikan berikut menunjukkan cara mendapatkan matriks transformasi tampilan, dan juga matriks transformasi perspektif. Anda perlu memastikan bahwa Anda membuat dengan latensi rendah. Objek Mata berisi matriks transformasi dan proyeksi untuk mata. Berikut rangkaian acaranya:

  • Harta itu datang ke ruang mata.
  • Kami menerapkan matriks proyeksi. Ini memberikan pemandangan yang diberikan untuk mata yang ditentukan.
  • Cardboard SDK menerapkan distorsi secara otomatis, untuk merender adegan terakhir.
 /**

* Menggambar bingkai untuk mata.

*

* @param eye Mata untuk dirender. Termasuk semua transformasi yang diperlukan.

*/

@Mengesampingkan

public void onDrawEye(Mata mata) {

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

...

// Terapkan transformasi mata ke kamera.

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

 

// Atur posisi lampu

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

 

// Bangun matriks ModelView dan ModelViewProjection

// untuk menghitung posisi kubus dan cahaya.

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

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

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

drawCube();

 

// Gambar sisa adegan.

...

}

Menangani masukan

Penampil Cardboard menyertakan tombol tekan yang menggunakan magnet. Saat Anda mendorong magnet, medan magnet berubah dan terdeteksi oleh magnetometer ponsel Anda. Peristiwa magnet ini dideteksi oleh Cardboard SDK untuk Anda.

Harus Membaca Tutorial Alur Kerja Truelancer untuk Pengusaha

Untuk memberikan perilaku kustom saat pengguna menarik magnet, overrideCardboardActivity.onCardboardTrigger() dalam aktivitas aplikasi Anda. Di aplikasi berburu harta karun, jika Anda menemukan harta karun dan menarik magnetnya, Anda dapat menyimpan harta karun itu:

 /**

* Tingkatkan skor, sembunyikan objek, dan berikan umpan balik jika pengguna menarik magnet saat

* melihat objek. Jika tidak, ingatkan pengguna apa yang harus dilakukan.

*/

@Mengesampingkan

public void onCardboardTrigger() {

if (isLookingAtObject()) {

mScore++;

mOverlayView.show3DToast("Ditemukan! Cari yang lain.\nScore = " + mScore);

...

} kalau tidak {

mOverlayView.show3DToast("Lihat sekeliling untuk menemukan objek!");

}

// Selalu berikan umpan balik pengguna

mVibrator.vibrate(50);

}

Mulai proyek Anda sendiri

Sekarang setelah Anda lebih mengenal Cardboard SDK untuk Android, sekarang saatnya membuat aplikasi Anda sendiri.

Baik itu proyek baru yang Anda mulai dari awal atau yang sudah ada, inilah yang harus Anda lakukan.

1) Unduh dua file JAR. Klik di sini untuk mengunduh

2) Salin dan tempel ke folder app/libs Anda (Temukan ini di tampilan Proyek Struktur Proyek Android Studio)

3) Klik kanan pada perpustakaan dan pilih "Tambah sebagai perpustakaan"

Kemudian, pastikan baris berikut ada di file app/build.gradle proyek Anda:

dependensi { … kompilasi fileTree(dir: 'libs', include: ['*.jar']) }

Anda siap untuk memulai pengembangan aplikasi Virtual Reality!

Apakah Anda seorang Pengembang Android? Bergabunglah dengan Truelancer hari ini & Mulai Freelancing

Pekerjakan Freelancer di Truelancer