ARCore برای Jetpack XR میتواند سطوح صاف محیط کاربر را تشخیص داده و اطلاعاتی در مورد آنها مانند حالت، اندازه و جهتگیری ارائه دهد. این میتواند به برنامه شما کمک کند تا سطوحی مانند میز را برای قرار دادن اشیاء روی آنها پیدا کند.
دسترسی به یک جلسه
از طریق یک Session ARCore برای 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 برای 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 }