Jetpack XR için ARCore'u kullanarak uçakları algılama

Jetpack XR için ARCore, kullanıcının ortamındaki düz yüzeyleri algılayabilir ve bu yüzeylerle ilgili poz, boyut ve yön gibi bilgiler sağlayabilir. Bu, uygulamanızın nesneleri yerleştirebileceği masalar gibi yüzeyleri bulmasına yardımcı olabilir.

Jetpack XR için ARCore oturumu oluşturma

Jetpack için ARCore XR oturumu aracılığıyla uçak bilgilerine erişme Session almak için Bir oturumun yaşam döngüsünü anlama başlıklı makaleyi inceleyin.

Oturumu yapılandırma

Düzlem algılama, XR oturumlarında varsayılan olarak etkin değildir. Düzlem izlemeyi etkinleştirmek için oturumu yapılandırın ve PlaneTrackingMode.HORIZONTAL_AND_VERTICAL modunu ayarlayın:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* A different unhandled exception was thrown. */)
}

Algılanan düzlemlerin durumunu alma

Jetpack XR için ARCore, düzlemlerin durumunu düzlemlerin durumunu yayan bir StateFlow aracılığıyla sağlar. Bir oturumda düzlemlere abone olmak, düzlemler eklendiğinde, güncellendiğinde veya kaldırıldığında uygulamanızı bilgilendirir.

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

Bir düzlem aşağıdaki özelliklere sahiptir:

  • label: Belirli bir Plane için anlamsal açıklama. WALL, FLOOR, CEILING veya TABLE olabilir.
  • centerPose: Algılanan düzlemin merkezinin pozu.
  • extents: Algılanan düzlemin metre cinsinden boyutları.
  • vertices: Düzlemi yaklaşık olarak temsil eden dışbükey bir poligonun köşe listesi.

Düzlemlere karşı isabet testi gerçekleştirme

Vuruş testi, bir ışının oturum tarafından izlenen nesnelerle kesişimini hesaplama yöntemidir. Vurma testinin yaygın bir uygulaması, bir masayı işaretleyip o konuma bir nesne yerleştirmektir. İsabet testi yapıldığında isabet eden nesnelerin listesi oluşturulur. Diğer bir deyişle, isabet testi ilk isabet eden nesnede durmaz. Ancak genellikle belirli bir türdeki ilk nesne isabetiyle ilgilenirsiniz.

Bir isabet testi gerçekleştirmek için Interaction.hitTest() ile Ray kullanın:

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
}