Ihre App kann über ARCore für Jetpack XR Tiefeninformationen abrufen, um zu ermitteln, wie nah sich physische Objekte am Gerät befinden.
ARCore für Jetpack XR-Sitzung erstellen
Tiefeninformationen über einen ARCore für Jetpack XR-Session abrufen. Wenn Sie die räumliche Benutzeroberfläche mit Jetpack Compose for XR verbessern, können Sie über Jetpack Compose for XR auf eine Sitzung zugreifen. Wenn Sie mit räumlichen Entitäten aus der Jetpack SceneCore-Bibliothek arbeiten, greifen Sie auf eine Sitzung aus der Jetpack XR-Laufzeit zu.
Sitzung konfigurieren
Das Abrufen von Tiefenkarten ist in XR-Sitzungen nicht standardmäßig aktiviert. Wenn Sie den Abruf von Tiefenkarten aktivieren möchten, konfigurieren Sie die Sitzung und legen Sie einen DepthEstimationMode fest:
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. */) }
Die folgenden Werte von DepthEstimationMode sind verfügbar:
DISABLED: Es werden keine Informationen zur Szenentiefe bereitgestellt.RAW_ONLY: Die Tiefenschätzung ist mit Rohwerten für Tiefe und Konfidenz aktiviert.SMOOTH_ONLY: Die Tiefenschätzung ist mit Werten für die gleichmäßige Tiefe und Konfidenz aktiviert.SMOOTH_AND_RAW: Die Tiefenschätzung ist sowohl mit Roh- als auch mit geglätteten Tiefen- und Konfidenzwerten aktiviert.
Roh-Tiefenkarten liefern genauere Tiefenschätzungen, aber Roh-Tiefenbilder enthalten möglicherweise nicht für alle Pixel im Kamerabild Tiefenschätzungen. Im Gegensatz dazu liefern die geglätteten Tiefenkarten eine geschätzte Tiefe für jedes Pixel. Die Tiefendaten pro Pixel sind jedoch aufgrund der Glättung und Interpolation der Tiefenschätzungen möglicherweise weniger genau.
Unterstützung von Tiefenkarten prüfen
Die Funktionen unterscheiden sich je nach Gerät. Geräte mit einer Stereokamerakonfiguration können Tiefenschätzungskarten für die linke und rechte Kamera bereitstellen. Ebenso können Geräte mit einer einzelnen Kamera nur Tiefenschätzungskarten für die Monokamera bereitstellen.
Mit XrDevice.isRenderingModeSupported können Sie prüfen, welche Tiefenkarten vom Gerät unterstützt werden:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Tiefendaten abrufen
Verwenden Sie Depth, um Tiefendaten für eine bestimmte Kamera abzurufen:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Tiefenwerte berechnen
Sie können Tiefen- und Konfidenzwerte aus der resultierenden Tiefenkarte abrufen:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Je nach verwendeter Konfigurationseinstellung können Sie mit smoothDepthMap oder rawDepthMap auf die entsprechende Tiefenkarte zugreifen. Die Messwerte in diesen Karten werden in Metern angegeben. Sie können auch mit smoothConfidenceMap und rawConfidenceMap auf die Konfidenzwerte zugreifen. Diese Werte reichen von 0 bis 255, wobei 255 für die höchste Konfidenz steht.
Informationen zum Rendern einer Tiefenkarte für Debugging- oder Visualisierungszwecke finden Sie im Abschnitt „Depth“ der ARCore-Test-App.