Sıfırdan Sanal Gerçeklik Android Uygulamaları Geliştirmeyi Öğrenin
Yayınlanan: 2015-11-16Bu makale, Android Uygulaması geliştirmenin temellerini zaten bildiğinizi varsayarak, Sanal Gerçeklik Android Uygulamalarını sıfırdan nasıl geliştireceğiniz konusunda size rehberlik edecektir.
Gereksinimler
- Android Studio 1.0 veya üstü
- Android SDK'nın 19. Sürümü
- Android 16(Jelly Bean) veya Üzerini çalıştıran fiziksel bir Android cihazı
Manifest Dosyası
<belirgin ... <kullanım izni 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" /> <uygulama ... <aktivite android:name=".MainActivity" android:screenOrientation="manzara"> ... <intent-filtre> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="com.google.intent.category.CARDBOARD" /> </intent-filtre> </etkinlik> </application> </manifest>
İzinlerin açıklanması:
- <uses-sdk Android:minSdkVersion=”16″/> , cihazın API Düzey 16 (Jellybean) veya daha yüksek bir sürümünü çalıştırması gerektiğini belirtir.
- <uses-sdk Android:targetSdkVersion=”19″/> , uygulamamızın API Düzey 19'u (KitKat) hedeflediğini gösterir.
- <uses-feature Android:glEsVersion=”0x00020000″ Android:required=”true” /> , uygulamanın grafik kullandığını ve dolayısıyla OpenGL ES 2.0'ı desteklemesi gerektiğini belirtir.
- android:screenOrientation=”landscape” , etkinliğin gerekli ekran yönünün “manzara” olduğunu belirtir. Bu, VR uygulamaları için ayarlamanız gereken yöndür. Cardboard SDK, CardboardView tarafından kullanılan görünüm, yalnızca tam ekran ve yatay (manzara, tersLandscape, sensorLandscape) modlarında oluşturulur.
- Android:configChanges=”orientation|keyboardHidden” ayarı da önerilir, ancak zorunlu değildir.
- Cardboard'un NFC etiketine erişmek için Cardboard SDK tarafından android.permission.NFC izni gerekir.
- android.permission.READ_EXTERNAL_STORAGE ve android.permission.WRITE_EXTERNAL_STORAGE . Bu izinler, Cardboard SDK tarafından kullanıcının telefonunu kendi VR görüntüleyicisiyle eşleştirmek için gereklidir.
- Android.permission.VIBRATE izni, demo uygulamamız tarafından kullanıcıya bir şey olduğunu bildirmek için telefonun titreşmesini sağlamak için gereklidir.
- Amaç filtresi ve özellikle com.google.intent.category.CARDBOARD , bu etkinliğin Cardboard benzeri görüntüleyicilerle uyumlu olduğunu belirtir. Bu kategori, Cardboard uygulaması tarafından, kullanıcının telefonunda yüklü olan uyumlu uygulamaları listelemek için kullanılır.
Karton Etkinliğini Genişletin:
CardboardActivity, bir karton uygulamasını kodlamanın başlangıç noktasıdır. CardboardActivity, Cardboard cihazlarıyla kolay entegrasyon sağlayan temel aktivitedir. Kartonlarla etkileşime girecek olayları ortaya çıkarır ve VR işleme için bir etkinlik oluştururken yaygın olarak gereken birçok ayrıntıyı işler.
CardboardActivity'nin, sistem kullanıcı arabiriminin gizlendiği ve içeriğin tüm ekranı kapladığı yapışkan sürükleyici modu kullandığını unutmayın. CardboardView yalnızca etkinlik tam ekran modundayken oluşturulduğundan, bu bir VR uygulaması için bir gerekliliktir.
Android 4.4 (API Düzeyi 19), setSystemUiVisibility() için uygulamanızın gerçekten "tam ekran" olmasını sağlayan yeni bir SYSTEM_UI_FLAG_IMMERSIVE bayrağı sunar. Bu bayrak, SYSTEM_UI_FLAG_HIDE_NAVIGATION ve SYSTEM_UI_FLAG_FULLSCREEN bayraklarıyla birleştirildiğinde, gezinme ve durum çubuklarını gizler ve uygulamanızın ekrandaki tüm dokunma olaylarını yakalamasını sağlar.
Bir CardBoardView tanımlayın:
Bir Android uygulamasındaki tüm kullanıcı arabirimi öğeleri, görünümler kullanılarak oluşturulur. Android için Cardboard SDK, VR oluşturma için kullanılabilen GLSurfaceView'ın kullanışlı bir uzantısı olan CardboardView adlı kendi görünümünü sağlar. CardboardView, içeriği stereo olarak işler. Demo uygulamasının aCardboardView'ı etkinlik düzeni xml dosyasında nasıl tanımladığını aşağıdaki şekilde görebilirsiniz:
<com.google.vrtoolkit.cardboard.CardboardView android:doldur_parent" android:layout_height="fill_parent" />
Ardından ana aktivite sınıfında CardboardView'ı onCreate() yönteminde başlatır:
** * Görünümü CardboardView olarak ayarlar ve kullanacağımız dönüşüm matrislerini başlatır * Sahnemizi işlemek için. * @param saveInstanceState */ @Geçersiz kıl public void onCreate(Bundle saveInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.common_ui); CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view); // CardboardView.StereoRenderer'ı kartonView ile ilişkilendirin. kartonView.setRenderer(bu); // Karton Görünümü bu aktivite ile ilişkilendirin. setCardboardView(cardboardView); // Diğer nesneleri burada başlat .... }
Görünümü oluştur
CardboardView'ı aldığınızda, onu bir oluşturucu ile ilişkilendirirsiniz ve ardından CardboardView'ı aktivite ile ilişkilendirirsiniz. Cardboard iki tür oluşturucuyu destekler, ancak başlamanın en hızlı yolu, demo uygulamasının kullandığı CardboardView.StereoRenderer'ı kullanmaktır.
CardboardView.StereoRenderer şu temel yöntemleri içerir:
- onNewFrame(), bu uygulama her oluşturduğunda çağrılır.
- onDrawEye(), farklı göz parametreleriyle her bir göz için çağrılır.
Bunları uygulamak, normalde bir OpenGL uygulaması için yapacağınıza benzer. Bu yöntemler aşağıdaki bölümlerde daha ayrıntılı olarak tartışılmaktadır.
NewFrame'de uygula
Tek tek gözler işlenmeden önce işleme mantığını kodlamak için onNewFrame() yöntemini kullanın. Tek bir görünüme özgü olmayan tüm kare başına işlemler burada gerçekleşmelidir. Bu, modelinizi güncellemek için iyi bir yerdir. Bu pasajda, mHeadView değişkeni başın konumunu içerir. Kullanıcının hazineye bakıp bakmadığını anlamak için daha sonra kullanmak üzere bu değerin kaydedilmesi gerekir:
/** * Bir çerçeve çizmeden önce OpenGL ES'yi hazırlar. * @param headTransform Yeni çerçevedeki kafa dönüşümü. */ @Geçersiz kıl public void onNewFrame(HeadTransform headTransform) { ... headTransform.getHeadView(mHeadView, 0); ... }
onDrawEye uygula
Göz başına yapılandırmayı gerçekleştirmek için onDrawEye() öğesini uygulayın.
Bu, oluşturma kodunun özüdür ve normal bir OpenGL ES2 uygulaması oluşturmaya çok benzer. Aşağıdaki kod parçası, görünüm dönüştürme matrisinin ve ayrıca perspektif dönüştürme matrisinin nasıl alınacağını gösterir. Düşük gecikme ile render aldığınızdan emin olmanız gerekir. Eye nesnesi, göz için dönüşüm ve projeksiyon matrislerini içerir. Bu olayların sırası:
- Hazine göz boşluğuna gelir.
- Projeksiyon matrisini uyguluyoruz. Bu, belirtilen göz için oluşturulan sahneyi sağlar.
- Cardboard SDK, son sahneyi oluşturmak için otomatik olarak distorsiyon uygular.
/** * Bir göz için çerçeve çizer. * * @param eye Oluşturulacak göz. Gerekli tüm dönüşümleri içerir. */ @Geçersiz kıl public void onDrawEye(Eye eye) { GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); ... // Göz dönüşümünü kameraya uygula. Matrix.multiplyMM(mView, 0, eye.getEyeView(), 0, mCamera, 0); // Işığın konumunu ayarla Matrix.multiplyMV(mLightPosInEyeSpace, 0, mView, 0, LIGHT_POS_IN_WORLD_SPACE, 0); // ModelView ve ModelViewProjection matrislerini oluşturun // küp konumu ve ışığı hesaplamak için. kayan nokta[] perspektif = eye.getPerspective(Z_NEAR, Z_FAR); Matrix.multiplyMM(mModelView, 0, mView, 0, mModelCube, 0); Matrix.multiplyMM(mModelViewProjection, 0, perspektif, 0, mModelView, 0); drawCube(); // Sahnenin geri kalanını çiz. ... }
Girişleri işleme
Cardboard görüntüleyici, bir mıknatıs kullanan bir basma düğmesi içerir. Mıknatısa bastığınızda, manyetik alan değişir ve telefonunuzun manyetometresi tarafından algılanır. Bu magnet olayları, Cardboard SDK tarafından sizin için algılanır.
Kullanıcı mıknatısı çektiğinde özel davranış sağlamak için uygulamanızın etkinliğindeCardboardActivity.onCardboardTrigger() öğesini geçersiz kılın. Hazine avı uygulamasında, hazineyi bulup mıknatısı çekerseniz, hazineyi saklarsınız:
/** * Puanı artırın, nesneyi gizleyin ve kullanıcı mıknatısı çekerken geri bildirimde bulunun * nesneye bakmak. Aksi takdirde, kullanıcıya ne yapması gerektiğini hatırlatın. */ @Geçersiz kıl public void onCardboardTrigger() { if (isLookingAtObject()) { mSkor++; mOverlayView.show3DToast("Buldum! Başka bir tane arayın.\nScore = " + mScore); ... } başka { mOverlayView.show3DToast("Nesneyi bulmak için etrafa bakın!"); } // Her zaman kullanıcı geri bildirimi verin mVibrator.titreşim(50); }
Kendi projeni başlat
Artık Android için Cardboard SDK'ya daha aşina olduğunuza göre, kendi uygulamalarınızı oluşturma zamanı.
Sıfırdan başladığınız yeni bir proje veya mevcut bir proje olsun, yapmanız gerekenler burada.
1) İki JAR dosyasını indirin. İndirmek için buraya tıkla
2) Kopyalayıp app/libs klasörünüze yapıştırın (Bunu Android Studio Proje Yapısının Proje görünümünde bulun)
3) Kütüphanelere sağ tıklayın ve “Kütüphane olarak ekle” yi seçin
Ardından, projenizin app/build.gradle dosyasında aşağıdaki satırların bulunduğundan emin olun:
bağımlılıklar { … fileTree derleyin(dir: 'libs', şunları içerir: ['*.jar']) }
Sanal Gerçeklik uygulaması geliştirmeye hızlı bir başlangıç yapmaya hazırsınız!