هواپیماها را با استفاده از ARCore برای Jetpack XR شناسایی کنید

ARCore برای Jetpack XR می تواند سطوح مسطح در محیط کاربر را تشخیص دهد و اطلاعاتی مانند حالت، اندازه و جهت آنها را در مورد آنها ارائه دهد. این می تواند به برنامه شما کمک کند سطوحی مانند جداول برای قرار دادن اشیاء را پیدا کند.

یک ARCore برای جلسه Jetpack XR ایجاد کنید

دسترسی به اطلاعات هواپیما از طریق یک جلسه ARCore برای Jetpack XR. برای به دست آوردن Session به درک چرخه زندگی یک Session مراجعه کنید.

Session را پیکربندی کنید

تشخیص هواپیما به طور پیش فرض در جلسات XR فعال نیست. برای فعال کردن ردیابی هواپیما، جلسه را پیکربندی کنید:

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
}