זיהוי מטוסים באמצעות ARCore ל-Jetpack XR

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי XR
משקפי AR חוטיים

‫ARCore for Jetpack XR יכול לזהות משטחים שטוחים בסביבת המשתמש ולספק מידע עליהם, כמו המיקום, הגודל והכיוון שלהם. המידע הזה יכול לעזור לאפליקציה למצוא משטחים כמו שולחנות כדי להניח עליהם אובייקטים.

גישה לסשן

גישה למידע על מישור דרך Session של ARCore for Jetpack XR. אם אתם משפרים ממשק משתמש מרחבי באמצעות Jetpack Compose for XR, אתם יכולים לגשת לסשן מ-Jetpack Compose for 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
}