Uygulamanız, fiziksel nesnelerin cihaza ne kadar yakın olduğunu belirlemek için Jetpack XR'de ARCore aracılığıyla derinlik bilgilerini alabilir.
Jetpack XR için ARCore oturumu oluşturma
Jetpack XR için ARCore aracılığıyla derinlik bilgisi alın
Session. XR için Jetpack Compose kullanarak uzamsal kullanıcı arayüzünü geliştiriyorsanız XR için Jetpack Compose'un bir oturumuna 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
Derinlik haritası alma özelliği, XR oturumlarında varsayılan olarak etkin değildir. Derinlik haritası almayı etkinleştirmek için oturumu yapılandırın ve DepthEstimationMode ayarlayın:
val newConfig = session.config.copy( depthEstimation = DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Aşağıdaki DepthEstimationMode değerleri kullanılabilir:
DISABLED: Sahne derinliği hakkında bilgi verilmiyor.RAW_ONLY: Derinlik tahmini, ham derinlik ve güven değerleriyle etkinleştirilir.SMOOTH_ONLY: Derinlik tahmini, düzgün derinlik ve güven değerleriyle etkinleştirilir.SMOOTH_AND_RAW: Derinlik tahmini, hem ham hem de düzgün derinlik ve güven değerleriyle etkinleştirilir.
İşlenmemiş derinlik haritaları, daha yüksek doğrulukta derinlik tahminleri sağlar ancak işlenmemiş derinlik görüntüleri, kamera görüntüsündeki tüm pikseller için derinlik tahminleri içermeyebilir. Buna karşılık, düzgün derinlik haritaları her piksel için tahmini derinlik sağlar ancak derinlik tahminlerinin düzeltilmesi ve enterpolasyonu nedeniyle piksel başına derinlik verileri daha az doğru olabilir.
Derinlik haritası özelliklerini kontrol etme
Farklı cihazların farklı özellikleri vardır. Stereo kamera yapılandırmasına sahip cihazlar, sol ve sağ kameralar için derinlik tahmini haritaları sağlayabilir. Benzer şekilde, tek kameralı cihazlar yalnızca mono kamera için derinlik tahmini haritaları sağlayabilir.
Cihaz tarafından hangi derinlik haritalarının desteklendiğini kontrol etmek için XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Derinlik verilerini alma
Belirli bir kameranın derinlik verilerini elde etmek için DepthMap kullanın:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Derinlik değerlerini hesaplama
Derinlik ve güven değerlerini sonuç derinlik haritasından elde edebilirsiniz:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Kullanılan yapılandırma ayarına bağlı olarak, smoothDepthMap veya rawDepthMap kullanarak ilgili derinlik haritasına erişin. Bu haritalarda yer alan ölçümler metre cinsinden ifade edilir. Ayrıca smoothConfidenceMap ve rawConfidenceMap kullanarak da güven değerlerine erişebilirsiniz. Bu değerler 0 ile 255 arasında değişir. 255, en yüksek güveni temsil eder.
Hata ayıklama veya görselleştirme amacıyla derinlik haritası oluşturmak için ARCore test uygulamasının Derinlik bölümüne bakın.