ARCore برای Jetpack XR میتواند سطوح صاف در محیط کاربر را شناسایی کند و اطلاعاتی درباره آنها ارائه دهد، مثلاً وضعیت، اندازه، و جهت آنها. این کار میتواند به برنامه شما کمک کند سطوحی مثل میز را برای قرار دادن اشیا روی آن پیدا کند.
دسترسی به جلسه
ازطریق ARCore برای Jetpack XR به اطلاعات صفحه دسترسی پیدا کنید Session. اگر بااستفاده از Jetpack Compose for XR درحال بهبود میانای کاربر فضایی هستید، از Jetpack Compose for XR به جلسه دسترسی پیدا کنید. اگر با
نهادهای فضاییشده از کتابخانه Jetpack SceneCore کار میکنید، از Jetpack XR Runtime به جلسه دسترسی پیدا کنید.
پیکربندی جلسه
تشخیص صفحه بهطور پیشفرض در جلسات XR فعال نیست. برای فعال کردن ردیابی هواپیما، جلسه را پیکربندی کنید و حالت PlaneTrackingMode.HORIZONTAL_AND_VERTICAL را تنظیم کنید:
val newConfig = Config.Builder(session.config) .setPlaneTracking(PlaneTrackingMode.HORIZONTAL_AND_VERTICAL) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
بازیابی وضعیت هواپیماهای درکشده
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 == PlaneLabel.TABLE }