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.
Bir oturuma erişme
Jetpack XR için ARCore Session aracılığıyla düzlem bilgilerine erişme. XR için Jetpack Compose'u kullanarak üç boyutlu kullanıcı arayüzünü geliştiriyorsanız XR için Jetpack Compose'dan bir oturuma erişin. Jetpack SceneCore kitaplığındaki uzamsallaştırılmış öğelerle çalışıyorsanız Jetpack XR Runtime'dan bir oturuma erişin.
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 SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
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 birPlaneiçin anlamsal açıklama.WALL,FLOOR,CEILINGveyaTABLEolabilir.centerPose: Algılanan düzlemin merkezinin duruşu.extents: Algılanan düzlemin metre cinsinden boyutları.vertices: Düzlemi yaklaşık olarak gösteren dışbükey bir poligonun köşelerinin 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 isabette 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 }