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 üç boyutlu 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 = Config.DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) 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 verilerini alma
Belirli bir kameranın derinlik verilerini elde etmek için DepthMap kullanın:
val depthMap = DepthMap.left(session) ?: return
Farklı cihazların farklı özellikleri vardır. Stereo kamera yapılandırmasına sahip cihazlar, left ve right kameraları için boş olmayan derinlik haritaları döndürür.
Benzer şekilde, tek kameralı cihazlar da mono kullanarak boş olmayan bir derinlik haritası döndürür.
Derinlik değerlerini hesaplama
Derinlik ve güven değerlerini sonuç derinlik haritasından alabilirsiniz:
val depthMap = DepthMap.left(session) ?: return
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.