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

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

إنشاء جلسة ARCore لتطبيق Jetpack XR

الوصول إلى معلومات الطائرة من خلال جلسة ARCore لتطبيق Jetpack XR اطّلِع على مقالة فهم رحلة جلسة للحصول على Session.

ضبط الجلسة

لا تكون ميزة "رصد السطح" مفعَّلة تلقائيًا في جلسات الواقع المعزّز. لتفعيل ميزة التتبّع للخطة، عليك ضبط الجلسة:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

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

يوفّر ARCore لـ 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
}