يمكن لتطبيق ARCore في Jetpack XR رصد الأسطح المستوية في بيئة المستخدم وتقديم معلومات عنها، مثل وضعها وحجمها واتجاهها. يمكن أن يساعد ذلك تطبيقك في العثور على أسطح، مثل الطاولات، لوضع الكائنات عليها.
إنشاء جلسة ARCore for Jetpack XR
الوصول إلى معلومات الطائرة من خلال جلسة ARCore for Jetpack XR راجِع مقالة التعرّف على مراحل نشاط الجلسة للحصول على Session
.
ضبط الجلسة
لا يتم تفعيل ميزة "رصد الطائرات" تلقائيًا في جلسات XR. لتفعيل ميزة تتبُّع الطائرة، اضبط الجلسة واضبط الوضع PlaneTrackingMode.HORIZONTAL_AND_VERTICAL
:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
استرداد حالة الطائرات المرئية
توفّر ARCore for Jetpack XR حالة الطائرات من خلال
StateFlow
التي تعرض حالة الطائرات. عند الاشتراك في
الطائرات في جلسة، يتم إعلام تطبيقك عند إضافة طائرات أو تعديلها أو إزالتها.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
يتضمّن المستوى الخصائص التالية:
label
: وصف دلاليPlane
معيّن يمكن أن يكونWALL
أوFLOOR
أوCEILING
أوTABLE
.-
centerPose
: يمثّل هذا الناتج وضعية مركز المستوى الذي تم رصده. -
extents
: تمثّل هذه السمة أبعاد المستوى الذي تم رصده، وذلك بالأمتار. -
vertices
: قائمة برؤوس مضلّع محدّب يقدّم تقريبًا للمستوى.
إجراء اختبار إصابة على الطائرات
اختبار التصادم هو طريقة لاحتساب تقاطع شعاع مع العناصر التي يتم تتبّعها في الجلسة. من التطبيقات الشائعة لاختبارات التصادم، توجيه المؤشر إلى طاولة ووضع عنصر في ذلك الموقع. يؤدي إجراء اختبار تحديد الموقع إلى عرض قائمة بالعناصر التي تم تحديد موقعها. بعبارة أخرى، لا يتوقف اختبار التصادم عند أول كائن يتم التصادم معه. ومع ذلك، قد تكون مهتمًا غالبًا بأول نتيجة تطابق لنوع معيّن من العناصر.
لإجراء اختبار إصابة، استخدِم Interaction.hitTest()
مع Ray
:
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.TABLE }