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 birPlane
öğesinin anlamsal açıklaması.Wall
,Floor
,Ceiling
veyaTable
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 }