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üzeyler hakkında duruş, boyut ve yön gibi bilgiler sağlayabilir. Bu, uygulamanızın nesne yerleştirmek için masa gibi yüzeyler bulmasına yardımcı olabilir.

Jetpack XR için ARCore oturumu oluşturma

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

Oturumu yapılandırma

Uçak algılama, XR oturumlarında varsayılan olarak etkin değildir. Uçak takibini etkinleştirmek için oturumu yapılandırın:

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! */)
}

Algılanan uçakların durumunu alma

Jetpack XR için ARCore, uçağın durumunu bildiren bir StateFlow aracılığıyla uçağın durumunu sağlar. Bir oturumda uçağa abone olmak, uçaklar eklendiğinde, güncellendiğinde veya kaldırıldığında uygulamanızı bilgilendirir.

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

Düzlemin aşağıdaki özellikleri vardır:

  • label: Belirli bir Plane öğesinin anlamsal açıklaması. Wall, Floor, Ceiling veya Table olabilir.
  • centerPose: Tespit edilen düzlem merkezinin duruşu.
  • extents: Tespit edilen düzlem boyutları (metre cinsinden).
  • vertices: Düzleme yaklaşık bir dışbükey poligonun köşe noktalarının listesi.

Uçaklara karşı isabet testi yapma

İsabet testi, bir ışının oturum tarafından izlenen nesnelerle kesişim noktasını hesaplama yöntemidir. İsabet testi, bir tabloyu işaretleyip bu konuma bir nesne yerleştirmek için yaygın olarak kullanılır. İsabet testi yapmak, isabet eden nesnelerin listesini oluşturur. Diğer bir deyişle, isabet testi ilk nesne isabetinde durmaz. Ancak genellikle yalnızca belirli bir türdeki ilk nesne isabeti ilginizi çekebilir.

İsabet testi yapmak 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
}