يمكن لتطبيق 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 }