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 oturumu aracılığıyla baş pozisyonu bilgilerini alma.
Session
elde etmek için Oturumun yaşam döngüsünü anlama başlıklı makaleyi inceleyin.
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.