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 birPlane
için anlamsal açıklama.WALL
,FLOOR
,CEILING
veyaTABLE
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 }