رصد الطائرات باستخدام ARCore لتطبيق Jetpack XR

أجهزة XR المعنيّة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة الواقع الممتد.
سماعات رأس بنظام الواقع الممتد
نظارات الواقع الممتد السلكية

يمكن لتطبيق ARCore for Jetpack XR رصد الأسطح المستوية في بيئة المستخدم وتقديم معلومات عنها، مثل وضعها وحجمها واتجاهها. يمكن أن يساعد ذلك تطبيقك في العثور على أسطح مثل الطاولات لوضع الكائنات عليها.

الوصول إلى جلسة

يمكنك الوصول إلى معلومات الطائرة من خلال Session في ARCore for Jetpack XR. إذا كنت بصدد تحسين واجهة المستخدم المكانية باستخدام Jetpack Compose للواقع الممتد (XR)، يمكنك الوصول إلى جلسة من خلال Jetpack Compose للواقع الممتد (XR). إذا كنت تعمل باستخدام كيانات مكانية من مكتبة Jetpack SceneCore، يمكنك الوصول إلى جلسة من Jetpack XR Runtime.

ضبط الجلسة

لا يتم تفعيل ميزة "رصد الطائرات" تلقائيًا في جلسات XR. لتفعيل ميزة تتبُّع الطائرة، اضبط الجلسة واضبط الوضع PlaneTrackingMode.HORIZONTAL_AND_VERTICAL:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

استرداد حالة الطائرات المرئية

توفّر 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
}