Uygulamanız, fiziksel nesnelerin cihaza ne kadar yakın olduğunu belirlemek için Jetpack XR için 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 alma
Session. XR için Jetpack Compose'u kullanarak uzamsal 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ış varlıklarla ç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 bir DepthEstimationMode ayarlayın:
val newConfig = Config.Builder(session.config) .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
DepthEstimationMode için aşağıdaki değerler kullanılabilir:
DISABLED: Sahne derinliğiyle ilgili bilgi verilmez.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.
Ham derinlik haritaları, daha yüksek doğrulukla derinlik tahminleri sağlar ancak ham 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ünleştirilmiş derinlik haritaları her piksel için tahmini derinlik sağlar ancak derinlik tahminlerinin düzgünleştirilmesi ve interpolasyonu 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 kamerası olan cihazlar yalnızca mono kamera için derinlik tahmin haritaları sağlayabilir.
Cihazın hangi derinlik haritalarını desteklediğini kontrol etmek için XrDevice.isRenderingModeSupported kullanın:
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 almak için Depth yöntemini kullanın:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Derinlik değerlerini hesaplama
Elde edilen derinlik haritasından derinlik ve güven değerlerini alabilirsiniz:
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 haritalardaki ölçümler
metre cinsinden ifade edilir. Güven değerlerine smoothConfidenceMap ve rawConfidenceMap kullanarak da 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.