تعلم كيفية تطوير تطبيقات Android للواقع الافتراضي من سكراتش

نشرت: 2015-11-16

ستوجهك هذه المقالة إلى كيفية تطوير تطبيقات الواقع الافتراضي على Android من البداية ، بافتراض أنك على دراية بأساسيات تطوير تطبيقات Android.

متطلبات

وظف Freelancer في Truelancer
  • Android Studio 1.0 أو أعلى
  • الإصدار 19 من Android SDK
  • جهاز Android فعلي يعمل بنظام Android 16 (Jelly Bean) أو أعلى

ملف البيان

 <بيان ...

<يستخدم إذن android: name = "android.permission.NFC" />

<يستخدم إذن android: name = "android.permission.READ_EXTERNAL_STORAGE" />

<يستخدم إذن android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />

 

<يستخدم إذن android: name = "android.permission.VIBRATE" />

...

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

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

<تطبيق

...

<النشاط

android: name = ". MainActivity"

android: screenOrientation = "Landscape">

...

 

<intent-filter>

<الإجراء android: name = "android.intent.action.MAIN" />

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

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

</intent-filter>

</activity>

</application>

</manifest>

شرح الأذونات:

  • <used-sdk android: minSdkVersion = ”16 ″ /> يشير إلى أن الجهاز يجب أن يعمل من مستوى API 16 (Jellybean) أو أعلى.
  • يشير <used-sdk android: targetSdkVersion = ”19 ″ /> إلى أن تطبيقنا يستهدف مستوى API 19 (KitKat).
  • يشير <الاستخدامات-feature android: glEsVersion = ”0x00020000 ″ android: required =” true ”/> إلى أن التطبيق يستخدم الرسومات ولذا يجب أن يدعم OpenGL ES 2.0.
  • android: screenOrientation = "Landscape" يشير إلى أن اتجاه الشاشة المطلوب للنشاط هو "أفقي". هذا هو الاتجاه الذي يجب عليك تعيينه لتطبيقات VR. يتم عرض العرض الذي تستخدمه Cardboard SDK و CardboardView في وضع ملء الشاشة والأفقي فقط (الوضع الأفقي ، المناظر الطبيعية العكسية ، المستشعر ، المناظر الطبيعية).
  • يوصى أيضًا بإعداد android: configChanges = ”orientation | keyboardHidden” ، ولكنه ليس إلزاميًا.
  • يلزم إذن android.permission.NFC بواسطة Cardboard SDK للوصول إلى علامة NFC الخاصة بـ Cardboard.
  • android.permission.READ_EXTERNAL_STORAGE و android.permission.WRITE_EXTERNAL_STORAGE . هذه الأذونات مطلوبة بواسطة Cardboard SDK لإقران هاتف المستخدم بعارض VR.
  • مطلوب إذن android.permission.VIBRATE من خلال تطبيقنا التجريبي لجعل الهاتف يهتز لإبلاغ المستخدم بحدوث شيء ما.
  • يشير عامل تصفية الهدف وعلى وجه التحديد com.google.intent.category.CARDBOARD إلى أن هذا النشاط متوافق مع أجهزة عرض تشبه Cardboard. يستخدم تطبيق Cardboard هذه الفئة لإدراج التطبيقات المتوافقة المثبتة على هاتف المستخدم.

تمديد نشاط Cardboard:

CardboardActivity هو نقطة البداية لترميز تطبيق Cardboard. CardboardActivity هو النشاط الأساسي الذي يوفر تكاملاً سهلاً مع أجهزة Cardboard. يعرض الأحداث للتفاعل مع Cardboard ويتعامل مع العديد من التفاصيل المطلوبة بشكل شائع عند إنشاء نشاط لعرض الواقع الافتراضي.

يجب أن تقرأ النجاح في العمل المستقل: قابل Aditya Web ومطور Android من بنغالور

لاحظ أن CardboardActivity يستخدم الوضع الثابت المجسم ، حيث تكون واجهة مستخدم النظام مخفية ، ويشغل المحتوى الشاشة بأكملها. يعد هذا مطلبًا لتطبيق VR ، نظرًا لأن CardboardView لن يتم عرضه إلا عندما يكون النشاط في وضع ملء الشاشة.

يقدم Android 4.4 (المستوى 19 من API) علامة 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    
android: fill_parent "    
android: layout_height = "fill_parent" />

ثم في فئة النشاط الرئيسية ، يقوم بتهيئة CardboardView بطريقة onCreate ():

 **
* يضبط العرض على CardboardView الخاص بنا ويهيئ مصفوفات التحويل التي سنستخدمها
* لتقديم مشهدنا. 
*param saveInstanceState 
* /
@تجاوز
public void onCreate (Bundle saveInstanceState) {    
super.onCreate (saveInstanceState) ؛    
setContentView (R.layout.common_ui) ؛    
CardboardView cardboardView = (CardboardView) findViewById (R.id.cardboard_view) ؛    
// إقران CardboardView.StereoRenderer مع CardboardView.    
cardboardView.setRenderer (هذا) ؛    
// إقران CardboardView بهذا النشاط.    
setCardboardView (cardboardView) ؛     
// تهيئة كائنات أخرى هنا
....
}

تقديم العرض

بمجرد حصولك على CardboardView ، فإنك تربطه بجهاز عرض ، ثم تربط عرض CardboardView بالنشاط. يدعم Cardboard نوعين من العارضين ، ولكن أسرع طريقة للبدء هي استخدام CardboardView.StereoRenderer ، وهو ما يستخدمه التطبيق التجريبي.

يتضمن CardboardView.RendererRenderer هذه الطرق الرئيسية:

  • onNewFrame () ، يتم استدعاؤها في كل مرة يتم فيها عرض التطبيق.
  • onDrawEye () ، تسمى لكل عين بمعلمات مختلفة للعين.
يجب أن تقرأ كيفية التعاقد مع مطور Wordpress وإعداد موقع الويب الخاص بك

يشبه تنفيذ ذلك ما تفعله عادةً لتطبيق OpenGL. تمت مناقشة هذه الطرق بمزيد من التفصيل في الأقسام التالية.

تنفيذ onNewFrame

استخدم طريقة onNewFrame () لترميز منطق العرض قبل عرض العيون الفردية. يجب أن تحدث هنا أي عمليات لكل إطار غير خاصة بمشاهدة واحدة. هذا مكان جيد لتحديث نموذجك. في هذا المقتطف ، يحتوي المتغير mHeadView على موضع الرأس. يجب حفظ هذه القيمة لاستخدامها لاحقًا لمعرفة ما إذا كان المستخدم يبحث عن الكنز:

 / **

* تحضير برنامج OpenGL ES قبل رسم إطار.

*param headTransform تحول الرأس في الإطار الجديد.

* /

@تجاوز

public void onNewFrame (HeadTransform headTransform) {

...

headTransform.getHeadView (mHeadView، 0) ،

...

}

تنفيذ onDrawEye

قم بتنفيذ onDrawEye () لإجراء تكوين لكل عين.

هذا هو جوهر كود العرض ، وهو مشابه جدًا لبناء تطبيق OpenGL ES2 العادي. يوضح المقتطف التالي كيفية الحصول على مصفوفة تحويل العرض ، وكذلك مصفوفة تحويل المنظور. يجب أن تتأكد من أنك تقوم بالعرض بزمن انتقال منخفض. يحتوي كائن العين على مصفوفات التحويل والإسقاط للعين. هذا هو تسلسل الأحداث:

  • الكنز يأتي إلى فضاء العين.
  • نطبق مصفوفة الإسقاط. يوفر هذا المشهد الذي يتم تقديمه للعين المحددة.
  • يطبق Cardboard SDK التشويه تلقائيًا ، لعرض المشهد النهائي.
 / **

* يرسم إطارًا للعين.

*

*param عين العين لتقديم. يشمل جميع التحولات المطلوبة.

* /

@تجاوز

الفراغ العام 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 و ModelViewProject

// لحساب موضع المكعب والضوء.

float [] المنظور = eye.getPerspective (Z_NEAR، Z_FAR) ؛

Matrix.multiplyMM (mModelView، 0، mView، 0، mModelCube، 0) ؛

Matrix.multiplyMM (mModelViewProject، 0، منظور، 0، mModelView، 0) ؛

drawCube () ؛

 

// ارسم بقية المشهد.

...

}

التعامل مع المدخلات

يشتمل عارض Cardboard على زر ضغط يستخدم مغناطيس. عندما تضغط على المغناطيس ، يتغير المجال المغناطيسي ويتم اكتشافه بواسطة مقياس المغناطيسية بهاتفك. تكتشف Cardboard SDK أحداث المغناطيس هذه.

يجب قراءة دروس Truelancer Workflow لأصحاب العمل

لتوفير سلوك مخصص عندما يسحب المستخدم المغناطيس ، overrideCardboardActivity.onCardboardTrigger () في نشاط تطبيقك. في تطبيق البحث عن الكنز ، إذا عثرت على الكنز وسحبت المغناطيس ، فستتمكن من الاحتفاظ بالكنز:

 / **

* قم بزيادة النتيجة وإخفاء الكائن وإعطاء ملاحظات إذا قام المستخدم بسحب المغناطيس أثناء ذلك

* النظر إلى الكائن. خلاف ذلك ، ذكر المستخدم ما يجب القيام به.

* /

@تجاوز

فراغ عام onCardboardTrigger () {

إذا (isLookingAtObject ()) {

مسكور ++ ؛

mOverlayView.show3DToast ("تم العثور عليها! ابحث عن واحدة أخرى. \ nScore =" + mScore)؛

...

} آخر {

mOverlayView.show3DToast ("انظر حولك للعثور على الكائن!") ؛

}

// دائما إعطاء ملاحظات المستخدم

اهتزاز mVibrator.vibrate (50) ؛

}

ابدأ مشروعك الخاص

الآن بعد أن أصبحت أكثر دراية بـ Cardboard SDK لنظام Android ، حان الوقت لإنشاء تطبيقاتك الخاصة.

سواء أكان مشروعًا جديدًا تبدأ من الصفر أو موجودًا بالفعل ، فإليك ما يجب عليك فعله.

1) قم بتنزيل ملفي JAR. إضغط هنا للتحميل

2) انسخها والصقها في مجلد التطبيق / libs (ابحث عن هذا في عرض المشروع لهيكل مشروع Android Studio)

3) انقر بزر الماوس الأيمن على المكتبات وحدد "إضافة كمكتبة"

بعد ذلك ، تأكد من وجود الأسطر التالية في ملف app / build.gradle الخاص بمشروعك:

التبعيات {... ترجمة fileTree (dir: 'libs' ، تشمل: ['* .jar'])}

أنت على استعداد لبدء تطوير تطبيقات الواقع الافتراضي!

هل أنت مطور Android؟ انضم إلى Truelancer اليوم وابدأ في العمل الحر

وظف Freelancer في Truelancer