أنشئ تطبيق Android للواقع المعزز باستخدام Google ARCore

مؤلف: Laura McKinney
تاريخ الخلق: 7 Lang L: none (month-011) 2021
تاريخ التحديث: 1 تموز 2024
Anonim
Create an Augmented Reality App in Android |  App Development Tutorial | Android Studio
فيديو: Create an Augmented Reality App in Android | App Development Tutorial | Android Studio

المحتوى


استيراد نماذج ثلاثية الأبعاد باستخدام المكون الإضافي Sceneform

عادةً ما يتطلب العمل مع النماذج ثلاثية الأبعاد معرفة متخصصة ، ولكن مع إصدار المكون الإضافي Sceneform ، مكنت Google من تقديم النماذج ثلاثية الأبعاد باستخدام Java - و بدون الحاجة إلى تعلم برنامج OpenGL.

يوفر المكون الإضافي Sceneform واجهة برمجة تطبيقات عالية المستوى يمكنك استخدامها لإنشاء Renderdables من عناصر واجهة المستخدم أو الأشكال أو المواد القياسية من Android ، أو من أصول ثلاثية الأبعاد ، مثل ملفات .OBJ أو .FBX.

في مشروعنا ، سنستخدم المكون الإضافي Sceneform لاستيراد ملف .OBJ إلى Android Studio. كلما قمت باستيراد ملف باستخدام Sceneform ، سيقوم هذا البرنامج المساعد تلقائيًا بما يلي:

  • تحويل ملف الأصول إلى ملف .sfb. هذا هو تنسيق Sceneform Binary المحسن لوقت التشغيل (.sfb) الذي تمت إضافته إلى ملف APK الخاص بك ثم تم تحميله في وقت التشغيل. سنستخدم ملف .sfb هذا لإنشاء Renderable ، والذي يتكون من شبكات ومواد ومواد ، ويمكن وضعها في أي مكان داخل المشهد المعزز.
  • قم بإنشاء ملف .sfa. هذا ملف وصف للأصول ، وهو ملف نصي يحتوي على وصف قابل للقراءة بواسطة الإنسان لملف .sfb. وفقًا للطراز ، قد تتمكن من تغيير مظهره عن طريق تحرير النص داخل ملف .sfa.


فقط عليك أن تدرك أنه في وقت كتابة هذا التقرير ، كان المكون الإضافي لـ Sceneform لا يزال في مرحلة تجريبية ، لذلك قد تصادف أخطاء أو أخطاء أو أي سلوك غريب عند استخدام هذا المكون الإضافي.

تثبيت البرنامج المساعد Sceneform

يتطلب البرنامج المساعد Sceneform Android Studio 3.1 أو أعلى. إذا لم تكن متأكدًا من إصدار Android Studio الذي تستخدمه ، فحدد "Android Studio> حول Android Studio" من شريط الأدوات. يحتوي الإطار المنبثق التالي على بعض المعلومات الأساسية حول تثبيت Android Studio ، بما في ذلك رقم الإصدار الخاص به.

لتثبيت البرنامج المساعد Sceneform:

  • إذا كنت تستخدم جهاز Mac ، فحدد "Android Studio> تفضيلات ..." من شريط أدوات Android Studio ، ثم اختر "Plugins" من القائمة اليمنى. إذا كنت تستخدم جهاز كمبيوتر يعمل بنظام Windows ، فحدد "ملف> إعدادات> مكونات إضافية> تصفح المستودعات".
  • ابحث عن "Sceneform". عندما تظهر "Google Sceneform Tools" ، حدد "تثبيت".
  • أعد تشغيل Android Studio عندما يُطلب منك ، وسيكون المكون الإضافي جاهزًا للاستخدام.


Sceneform UX و Java 8: تحديث تبعيات مشروعك

لنبدأ بإضافة التبعيات التي سنستخدمها خلال هذا المشروع. افتح ملف build.gradle على مستوى الوحدة النمطية الخاصة بك ، وقم بإضافة مكتبة Sceneform UX ، التي تحتوي على ArFragment الذي سنستخدمه في تخطيطنا:

التبعيات {application fileTree (dir: libs ، include:) بتنفيذ androidx.appcompat: appcompat: 1.0.2 implementation androidx.constraintlayout: constraintlayout: 1.1.3 testImitation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 // Sceneform UX يوفر موارد UX ، بما في ذلك ArFragment // implementation "com.google.ar.sceneform.ux: sceneform-ux: 1.7.0" implementation "com". android.support:appcompat-v7:28.0.0 "}

يستخدم Sceneform تصميمات لغة من Java 8 ، لذلك سنحتاج أيضًا إلى تحديث توافق المصدر والتوافق المستهدف لمشروعنا على Java 8:

compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}

أخيرًا ، نحتاج إلى تطبيق البرنامج المساعد Sceneform:

طبق المكوّن الإضافي: com.google.ar.sceneform.plugin

يجب أن يبدو ملف build.gradle المكتمل لديك مثل هذا:

طبق المكوّن الإضافي: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.arcoredemo" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runile. JavaVersion.VERSION_1_8} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-optimize.txt)، proguard-rules.pro}}} تبعيات {application fileTree (dir: libs، include:) implementation androidx.appcompat: appcompat: .2 تطبيق androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1 implementation "com.google. ar.sceneform.ux: sceneform-ux: 1.7.0 "تطبيق" com.android.support:appcompat-v7:28.0.0 "} قم بتطبيق المكون الإضافي: com.google.ar .sceneform.plugin

طلب أذونات مع ArFragment

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

يمنح Android 6.0 المستخدمين القدرة على منح الأذونات ورفضها وإلغاءها على أساس الإذن بالإذن. بينما أدى هذا إلى تحسين تجربة المستخدم ، يتعين على مطوري Android الآن طلب الأذونات يدويًا في وقت التشغيل ، والتعامل مع استجابة المستخدم. الأخبار الجيدة هي أنه عند تشغيل Google ARCore ، يتم تنفيذ عملية طلب إذن الكاميرا ومعالجة استجابة المستخدم تلقائيا.

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

AR مطلوب أو اختياري؟

هناك نوعان من التطبيقات التي تستخدم وظيفة AR:

1. AR المطلوبة

إذا كان تطبيقك يعتمد على Google ARCore من أجل تقديم تجربة مستخدم جيدة ، فأنت بحاجة إلى التأكد من أنه تم تنزيله فقط على الأجهزة التي تدعم ARCore. إذا قمت بوضع علامة على تطبيقك على أنه "مطلوب AR" ، فلن يظهر إلا في متجر Google Play ، إذا كان الجهاز يدعم ARCore.

منذ طلبنا هل تتطلب ARCore ، افتح البيان وأضف ما يلي:

هناك أيضًا فرصة لتنزيل التطبيق الخاص بك على جهاز يدعم ARCore نظريًا ، ولكن لم يتم تثبيت ARCore بالفعل. بمجرد وضع علامة على تطبيقنا على أنه "مطلوب AR" ، ستقوم Google Play تلقائيًا بتنزيل وتثبيت ARCore إلى جانب تطبيقك ، إذا لم يكن موجودًا بالفعل على الجهاز المستهدف.

فقط عليك أن تدرك أنه حتى لو كان تطبيقك يعمل بنظام Android: required = "true" ، فستكون كذلك ما يزال تحتاج إلى التحقق من وجود ARCore في وقت التشغيل ، لأن هناك احتمال أن يكون المستخدم قد قام بإلغاء تثبيت ARCore منذ تنزيل التطبيق الخاص بك ، أو أن إصداره من ARCore قديم.

والخبر السار هو أننا نستخدم ArFragment ، والذي يتحقق تلقائيًا من تثبيت ARCore وتحديثه قبل الإنشاء كل جلسة AR - مرة أخرى ، هذا شيء لا يتعين علينا تنفيذه يدويًا.

2. AR اختياري

إذا كان التطبيق الخاص بك يتضمن ميزات AR اللطيفة ولكن ليس ضروريًا لتقديم وظائفه الأساسية ، فيمكنك وضع علامة على هذا التطبيق كـ "AR اختياري". يمكن للتطبيق بعد ذلك التحقق مما إذا كان Google ARCore موجودًا في وقت التشغيل ، وتعطيله ميزات AR على الأجهزة التي لا تدعم ARCore.

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

إذا لم يكن ARCore ضروريًا لتطبيقك ، فيمكنك إضافة ما يلي إلى بيانك:

بينما يكون لدي Manifest مفتوحة ، إلا أنني أضيف أيضًا android: configChanges و android: screenOrientation ، لضمان تعامل MainActivity مع تغيرات الاتجاه بأمان.

بعد إضافة كل هذا إلى البيان ، يجب أن يبدو الملف المكتمل كما يلي:

إضافة ArFragment إلى التخطيط الخاص بك

سأستخدم ARCore’s ArFragment ، لأنه يعالج تلقائيًا عددًا من مهام ARCore الرئيسية في بداية كل جلسة AR. وعلى الأخص ، يتحقق ArFragment من تثبيت إصدار متوافق من ARCore على الجهاز وأن التطبيق حاليًا لديه إذن الكاميرا.

بمجرد التحقق من ArFragment من أن الجهاز يمكنه دعم ميزات AR الخاصة بالتطبيق ، فإنه ينشئ جلسة عمل ArSceneView ARCore ، وتجربة AR للتطبيق جاهزة للذهاب!

يمكنك إضافة جزء ArFragment إلى ملف تخطيط ، تمامًا مثل جزء Android العادي ، لذلك افتح ملف activity_main.xml وأضف مكون "com.google.ar.sceneform.ux.ArFragment".

تنزيل نماذج ثلاثية الأبعاد ، باستخدام Poly من Google

هناك العديد من الطرق المختلفة التي يمكنك من خلالها إنشاء Renderables ، لكن في هذه المقالة سنستخدم ملف أصل ثلاثي الأبعاد.

يدعم Sceneform الأصول ثلاثية الأبعاد بتنسيقات .OBJ و .glTF و .FBX ، مع أو بدون رسوم متحركة. هناك الكثير من الأماكن التي يمكنك من خلالها الحصول على نماذج ثلاثية الأبعاد بأحد هذه التنسيقات المدعومة ، ولكن في هذا البرنامج التعليمي ، سأستخدم ملف .OBJ ، تم تنزيله من مستودع Google المتعدد.

توجه إلى موقع الويب Poly لتنزيل الأصل الذي تريد استخدامه بتنسيق .OBJ (أستخدم نموذج T-Rex).

  • قم بفك ضغط المجلد ، والذي يجب أن يحتوي على ملف الأصول المصدر لطرازك (.OBJ أو .FBX أو .glTF). وفقًا للطراز ، قد يحتوي هذا المجلد أيضًا على بعض تبعيات الطراز ، مثل الملفات بتنسيقات .mtl أو .bin أو .png أو .jpeg.

استيراد نماذج ثلاثية الأبعاد إلى Android Studio

بمجرد حصولك على الأصول الخاصة بك ، ستحتاج إلى استيرادها إلى Android Studio باستخدام المكون الإضافي Sceneform. هذه عملية متعددة الخطوات تتطلب منك:

  • قم بإنشاء مجلد "sampledata". يُعد Sampledata نوعًا جديدًا من مجلدات بيانات نموذج وقت التصميم التي لن يتم تضمينها في ملف APK الخاص بك ، ولكن ستكون متاحة في محرر Android Studio.
  • سحب وإسقاط ملف الأصول .OBJ الأصلي في مجلد "sampledata".
  • تنفيذ الاستيراد Sceneform والتحويل على ملف .OBJ ، والتي ستقوم بإنشاء ملفات .sfa و .sfb.

على الرغم من أنه قد يبدو أكثر وضوحا ، لا قم بسحب وإسقاط ملف .OBJ مباشرة في دليل "الدقة" الخاص بمشروعك ، لأن ذلك سيؤدي إلى تضمين النموذج في ملف APK الخاص بك دون داع.

لا تحتوي مشاريع Android Studio على مجلد "sampledata" افتراضيًا ، لذلك ستحتاج إلى إنشاء واحد يدويًا:

  • انقر مع الضغط على Control على مجلد "التطبيق" في مشروعك.
  • حدد "جديد> نموذج دليل البيانات" وقم بإنشاء مجلد باسم "sampledata".
  • انتقل إلى ملفات النماذج ثلاثية الأبعاد التي قمت بتنزيلها مسبقًا. ابحث عن ملف الأصول المصدر (.OBJ أو .FBX أو .glTF) ، ثم اسحبه وقم بإفلاته في دليل "sampledata".
  • تحقق مما إذا كان النموذج الخاص بك يحتوي على أي تبعيات (مثل الملفات بتنسيقات .mtl أو .bin أو .png أو .jpeg). إذا وجدت أيًا من هذه الملفات ، فقم بسحبها وإفلاتها في مجلد "sampledata".
  • في Android Studio ، انقر مع الضغط على Control على الملف المصدر للنموذج ثلاثي الأبعاد (.OBJ أو .FBX أو .glTF) ثم حدد "Import Sceneform Asset."

  • تعرض النافذة التالية بعض المعلومات حول الملفات التي سينشئها Sceneform ، بما في ذلك مكان تخزين ملف .sfa الناتج في مشروعك ؛ سأستخدم الدليل "الخام".
  • عندما تكون راضيًا عن المعلومات التي أدخلتها ، انقر فوق "إنهاء".

يقوم هذا الاستيراد بإجراء بعض التغييرات على مشروعك. إذا قمت بفتح ملف build.gradle الخاص بك ، فسترى أن المكون الإضافي Sceneform قد تمت إضافته باعتباره تبعية للمشروع:

تبعيات {classpath com.android.tools.build:gradle:3.5.0-alpha06 classpath com.google.ar.sceneform: plugin: 1.7.0 // ملاحظة: لا تضع تبعيات التطبيق الخاص بك هنا؛ ينتمون // في ملفات build.gradle للوحدة الفردية}}

افتح ملف build.gradle على مستوى الوحدة النمطية ، وستجد إدخالًا جديدًا لـformform.asset () لطراز ثلاثي الأبعاد مستورد:

طبق المكوّن الإضافي: com.google.ar.sceneform.plugin // "مسار مصدر الأصول" الذي حددته أثناء الاستيراد // sceneform.asset (sampledata / dinosaur.obj ، // "مسار المواد" الذي حددته أثناء الاستيراد // الافتراضي ، // "مسار إخراج .sfa" الذي حددته أثناء الاستيراد // sampledata / dinosaur.sfa ، // "مسار إخراج .sfb" الذي حددته أثناء الاستيراد // src / main / الأصول / الديناصور)

إذا ألقيت نظرة على مجلدي "sampledata" و "raw" ، فسترى أنهما يحتويان على ملفات .sfa و .sfb جديدة ، على التوالي.

يمكنك معاينة ملف .sfa ، في Sceneform Viewer الجديد في Android Studio:

  • اختر "View> Tools Windows> Viewer" من شريط قائمة Android Studio.
  • في القائمة اليمنى ، حدد ملف .sfa الخاص بك. يجب أن يظهر النموذج ثلاثي الأبعاد الخاص بك الآن في نافذة العارض.

عرض نموذج 3D الخاص بك

تتمثل مهمتنا التالية في إنشاء جلسة AR تتفهم محيطها ، وتتيح للمستخدم وضع نماذج ثلاثية الأبعاد في مشهد معزز.

هذا يتطلب منا القيام بما يلي:

1. إنشاء متغير عضو ArFragment

ينفذ ArFragment الكثير من الرفع الثقيل الذي ينطوي عليه إنشاء جلسة AR ، لذلك سنرجع إلى هذا الجزء طوال فصلنا الرئيسي.

في المقتطف التالي ، أقوم بإنشاء متغير عضو لـ ArFragment ، ثم قم بتهيئته في طريقة onCreate ():

ArFragment الخاص arCoreFragment. Override محمية void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState)؛ ... ... ...} setContentView (R.layout.activity_main)؛ arCoreFragment = (ArFragment) // ابحث عن الجزء ، باستخدام مدير التجزئة // getSupportFragmentManager (). findFragmentById (R.id.main_fragment)؛

2. بناء ModelRenderable

نحتاج الآن إلى تحويل ملف .sfb الخاص بنا إلى ModelRenderable ، مما سيؤدي في النهاية إلى تقديم كائن ثلاثي الأبعاد.

هنا ، أقوم بإنشاء ModelRenderable من ملف res / raw / dinosaur الخاص بمشروعي:

ModelRenderable dinoRenderable الخاصة ؛ ... ... ... ModelRenderable.builder () .setSource (هذا ، R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable) .Exceptually (throwable -> {Log.e ( TAG ، "غير قادر على تحميل renderable") ؛ عودة فارغة ؛}) ؛ }

3. الرد على إدخال المستخدم

يحتوي ArFragment على دعم داخلي لإيماءات النقر والسحب والقرصة وتطورها.

في تطبيقنا ، سيضيف المستخدم نموذجًا ثلاثي الأبعاد إلى طائرة ARCore ، عن طريق إعطاء هذه الطائرة نقرة.

لتقديم هذه الوظيفة ، نحتاج إلى تسجيل رد اتصال يتم استدعاءه عند النقر على الطائرة:

arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult، Plane plane، MotionEvent motionEvent) -> {if (dinoRenderable == null) {return؛}

4. مرساة النموذج الخاص بك

في هذه الخطوة ، سنقوم باسترداد ArSceneView وإرفاقه بـ AnchorNode ، والذي سيكون بمثابة العقدة الرئيسية ل Scene.

يعد ArSceneView مسؤولاً عن أداء العديد من مهام ARCore المهمة ، بما في ذلك تقديم صور الكاميرا الخاصة بالجهاز ، وعرض رسم متحرك لـ Sceneform UX يوضح كيفية قيام المستخدم بحمل أجهزته ونقلها من أجل بدء تجربة AR. سيقوم ArSceneView أيضًا بتسليط الضوء على أي طائرات يكتشفها ، وعلى استعداد للمستخدم لوضع النماذج ثلاثية الأبعاد الخاصة به داخل المشهد.

يحتوي مكون ARSceneView على مشهد مرفق به ، وهو عبارة عن بنية بيانات أصل - تابع تحتوي على كافة العقد التي يلزم تقديمها.

سنبدأ من خلال إنشاء عقدة من النوع AnchorNode ، والتي ستكون بمثابة العقدة الرئيسية لأركنس فيو.

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

لنقم بإنشاء عقدة الربط الخاصة بنا:

AnchorNode anchorNode = جديد AnchorNode (مرساة) ؛

يمكننا بعد ذلك استرداد ArSceneView ، باستخدام getArSceneView () ، وإرفاقه بـ AnchorNode:

anchorNode.setParent (arCoreFragment.getArSceneView () getScene ())؛

5. إضافة دعم للتحرك ، التحجيم وتدوير

بعد ذلك ، سأقوم بإنشاء عقدة من النوع TransformableNode. تعد TransformableNode مسؤولة عن تحريك العقد وتحجيمه وتدويره ، بناءً على إيماءات المستخدم.

بمجرد إنشاء TransformableNode ، يمكنك إرفاقها بـ Renderable ، والتي ستمنح النموذج القدرة على القياس والتحرك ، بناءً على تفاعل المستخدم. أخيرًا ، تحتاج إلى توصيل TransformableNode بـ AnchorNode ، في علاقة تابعة للطفل والتي تضمن TransformableNode و تبقى ثابتة في مكانها داخل المشهد المعزز.

TransformableNode convertableNode = جديد TransformableNode (arCoreFragment.getTransformationSystem ())؛ // Connect convertableNode to anchorNode // convertableNode.setParent (anchorNode)؛ transformableNode.setRenderable (dinoRenderable)؛ // حدد العقدة // convertableNode.select () ؛ })؛ }

الانتهاء MainActivity

بعد إجراء كل ما سبق ، يجب أن تبدو ميزة MainActivity الخاصة بك كما يلي:

استيراد android.app.Activity ؛ استيراد android.app.ActivityManager ؛ استيراد androidx.appcompat.app.AppCompatActivity ؛ استيراد android.content.Context؛ استيراد android.net.Uri ؛ استيراد android.os.Build ؛ استيراد android.os.Build.VERSION_CODES ؛ استيراد android.os.Bundle ؛ استيراد android.util.Log؛ استيراد android.view.MotionEvent ؛ استيراد androidx.annotation.RequiresApi؛ import com.google.ar.core.Anchor؛ import com.google.ar.core.HitResult؛ import com.google.ar.core.Plane؛ import com.google.ar.sceneform.AnchorNode؛ import com.google.ar.sceneform.rendering.ModelRenderable؛ import com.google.ar.sceneform.ux.ArFragment؛ import com.google.ar.sceneform.ux.TransformableNode؛ تم توسيع MainActivity من الفئة العامة AppCompatActivity {private static final String TAG = MainActivity.class.getSimpleName ()؛ مزدوج نهائي ثابت خاص MIN_OPENGL_VERSION = 3.0 ؛ // إنشاء متغير عضو لـ ModelRenderable // private ModelRenderable dinoRenderable؛ // إنشاء متغير عضو لـ ArFragment // private ArFragment arCoreFragment؛ RequiresApi (api = VERSION_CODES.N)Override محمية void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState)؛ إذا (! checkDevice ((هذا))) {return؛ } setContentView (R.layout.activity_main)؛ arCoreFragment = (ArFragment) // ابحث عن الجزء ، باستخدام مدير الشرائح // getSupportFragmentManager (). findFragmentById (R.id.main_fragment)؛ إذا كان (Build.VERSION.SDK_INT> = VERSION_CODES.N) {// قم بإنشاء ModelRenderable // ModelRenderable.builder () .setSource (هذا ، R.raw.dinosaur) .build () .thenAccept (renderable -> dinoRenderable = renderable ). استثناء (// في حالة حدوث خطأ ... // thrable -> {//...then ثم طباعة ما يلي إلى Logcat // Log.e (TAG ، "غير قادر على تحميل renderable") ؛ العودة فارغة ؛} )؛ } // استمع إلى أحداث onTap // arCoreFragment.setOnTapArPlaneListener ((HitResult hitResult ، طائرة مستوية ، MotionEvent motionEvent) -> {if (dinoRenderable == null) {return؛} Anchor anchor = hitResult.createAnchor عقدة من نوع AnchorNode // AnchorNode anchorNode = جديد AnchorNode (مرساة) ؛ // قم بتوصيل AnchorNode إلى Scene // anchorNode.setParent (arCoreFragment.getArSceneView (). getScene ())؛ // Build aode of type TransformableNode // TransformableNode convertableNode = جديد TransformableNode (arCoreFragment.getTransformationSystem ()) ؛ // قم بتوصيل TransformableNode بـ AnchorNode // convertableNode.setParent (anchorNode) ؛ // إرفاق Renderable // convertableNode.setRenderable (dinoRenderable) ؛ // / convertableNode.select ()؛})؛ } التحقق من منطقية ثابتة عامة (نشاط النشاط النهائي) {// إذا كان الجهاز يعمل بنظام Android Marshmallow أو إصدار سابق ... // إذا (Build.VERSION.SDK_INT <VERSION_CODES.N) {//... ثم اطبع ما يلي إلى Logcat // Log.e (TAG ، "يتطلب Sceneform أندرويد N أو أعلى") ؛ activity.finish ()؛ عودة كاذبة؛ } String openGlVersionString = ((ActivityManager) activity.getSystemService (Context.ACTIVITY_SERVICE)) .getDeviceConfigurationInfo () // تحقق من إصدار OpenGL ES // .getGlEsVersion ()؛ // إذا كان الجهاز يعمل بأي شيء أقل من OpenGL ES 3.0 ... // if (Double.parseDouble (openGlVersionString) <MIN_OPENGL_VERSION) {//... ثم قم بطباعة ما يلي إلى Logcat // Log.e (TAG ، " يتطلب برنامج OpenGL ES 3.0 أو أعلى ") ؛ activity.finish ()؛ عودة كاذبة؛ العودة الحقيقية ؛ }}

يمكنك تنزيل المشروع المكتمل من جيثب.

اختبار تطبيق Google ARCore للواقع المعزز

أنت الآن جاهز لاختبار تطبيقك على جهاز Android حقيقي ومدعوم. إذا لم تكن تمتلك جهازًا يدعم ARCore ، فيمكنك اختبار تطبيق AR في محاكي Android (مع قدر قليل من التكوين الإضافي ، الذي سنغطيه في القسم التالي).

لاختبار مشروعك على جسدي - بدني جهاز Android:

  • تثبيت التطبيق الخاص بك على الجهاز الهدف.
  • عند المطالبة ، امنح التطبيق حق الوصول إلى كاميرا جهازك.
  • إذا طُلب منك تثبيت أو تحديث تطبيق ARCore ، فانقر فوق "متابعة" ثم أكمل الحوار للتأكد من تشغيل أحدث وأكبر إصدار من ARCore.
  • يجب أن تشاهد الآن عرض الكاميرا ، مع استكمال الرسوم المتحركة لليد التي تحمل الجهاز. ضع الكاميرا على سطح مستو وحرك جهازك في حركة دائرية ، كما يتضح من الرسوم المتحركة. بعد لحظات قليلة ، يجب أن تظهر سلسلة من النقاط ، تشير إلى أنه تم اكتشاف طائرة.

  • بمجرد أن تكون راضيًا عن موضع هذه النقاط ، امنحهم نقرة - يجب أن يظهر النموذج ثلاثي الأبعاد الآن على الطائرة التي اخترتها!

  • حاول التحرك جسديًا حول النموذج ؛ حسب محيطك ، قد تكون قادرًا على عمل 360 درجة كاملة من حوله. يجب عليك أيضًا التحقق من أن الكائن يلقي بظلاله المتوافقة مع مصادر الإضاءة في العالم الحقيقي.

اختبار ARCore على جهاز Android الظاهري

لاختبار تطبيقات ARCore في جهاز Android الظاهري (AVD) ، ستحتاج إلى إصدار Android Emulator 27.2.9 أو أعلى. يجب أيضًا تسجيل الدخول إلى متجر Google Play على AVD ، وتمكين OpenGL ES 3.0 أو إصدار أعلى.

للتحقق من تمكين OpenGL ES 3.0 أو أعلى على AVD الخاص بك:

  • إطلاق AVD الخاص بك ، كالمعتاد.
  • افتح نافذة طرفية جديدة (Mac) أو موجه الأوامر (Windows).
  • قم بتغيير الدليل ("cd") بحيث يشير موجه الأوامر / الأوامر الطرفية إلى موقع برنامج "adb" الخاص بنظام Android SDK ، على سبيل المثال ، يبدو الأمر الخاص بي كما يلي:

CD / المستخدمين / jessicathornsby / Library / Android / sdk / platform-tools

  • اضغط على مفتاح "Enter" بلوحة المفاتيح.
  • انسخ / الصق الأمر التالي في الجهاز الطرفي ، ثم اضغط على مفتاح "Enter":

./adb logcat | grep eglMakeCurrent

إذا عادت المحطة الطرفية "ver 3 0" أو أعلى ، فسيتم تكوين برنامج OpenGL ES بشكل صحيح. إذا كان "موجه الأوامر" أو "موجه الأوامر" يعرض أي شيء أقدم من 3.0 ، فستحتاج إلى تمكين OpenGL ES 3.0:

  • العودة إلى AVD الخاص بك.
  • ابحث عن شريط أزرار "التحكم الموسّع" الذي يطفو بجانب محاكي Android ، ثم حدد "الإعدادات> خيارات متقدمة".
  • انتقل إلى "OpenGL ES API level> Renderer الأقصى (حتى OpenGL ES 3.1)."
  • أعد تشغيل المحاكي.

في نافذة موجه الأوامر / الأوامر ، انسخ / الصق الأمر التالي ، ثم اضغط على مفتاح "Enter"

./adb logcat | grep eglMakeCurrent

يجب أن تحصل الآن على نتيجة "ver 3 0" أو أعلى ، مما يعني أنه تم تكوين برنامج OpenGL ES بشكل صحيح.

أخيرًا ، تأكد من تشغيل AVD لأحدث إصدار من ARCore:

  • توجه إلى صفحة GitHub الخاصة بـ ARCore ، وقم بتنزيل أحدث إصدار من ARCore للمضاهاة. على سبيل المثال ، في وقت كتابة هذا التقرير ، كان أحدث إصدار هو "ARCore_1.7.0.x86_for_emulator.apk"
  • سحب وإسقاط APK على AVD قيد التشغيل.

لاختبار مشروعك على AVD ، قم بتثبيت التطبيق الخاص بك ومنحه إمكانية الوصول إلى "كاميرا" AVD عند المطالبة.

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

يمكنك نقل الكاميرا الافتراضية حول الغرفة الافتراضية ، عن طريق الضغط مع الاستمرار على مفتاحي "Option" (macOS) أو "Alt" (Linux أو Windows) ، ثم استخدام أي من اختصارات لوحة المفاتيح التالية:

  • تحرك اليسار أو اليمين. اضغط A أو D.
  • تحرك لأسفل أو لأعلى. اضغط على Q أو E.
  • التحرك إلى الأمام أو الخلف. اضغط W أو S.

يمكنك أيضًا "التنقل" حول المشهد الافتراضي ، عن طريق الضغط على "Option" أو "Alt" ثم استخدام الماوس. قد يشعر هذا بالقليل من الصعوبة في البداية ، ولكن مع الممارسة ، يجب أن تكون قادرًا على استكشاف الفضاء الافتراضي بنجاح. بمجرد العثور على طائرة محاكاة ، انقر فوق النقاط البيضاء لوضع نموذجك الثلاثي الأبعاد على هذا السطح.

تغليف

في هذا المقال ، أنشأنا تطبيقًا واقعيًا بسيطًا معززًا ، وذلك باستخدام ARCore والمكون الإضافي Sceneform.

إذا قررت استخدام Google ARCore في مشاريعك الخاصة ، فتأكد من مشاركة إبداعاتك في التعليقات أدناه!

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

إذا كنت قد قضيت الكثير من الوقت على الإنترنت ، فربما تعلم مدى أهمية ذلك حماية البيانات الخاصة بك بشكل متزايد بيئة الإنترنت الخطرة....

شعبية في الموقع