Dzięki ARCore dla Jetpack XR Twoja aplikacja może pobierać pozycję urządzenia: orientację (pochylenie, odchylenie, obrót) i położenie (X, Y, Z) urządzenia względem początku układu współrzędnych świata.
Użyj tych informacji, aby renderować treści cyfrowe w świecie rzeczywistym lub przekonwertować pozycję urządzenia na pozycję geoprzestrzenną, aby generować dane o lokalizacji.
Dostęp do sesji
Dostęp do informacji o pozycji urządzenia uzyskasz za pomocą Jetpack XR Runtime Session,
którą musi utworzyć Twoja aplikacja.
Konfigurowanie sesji
Informacje o pozycji urządzenia nie są domyślnie włączone w sesjach XR. Aby umożliwić aplikacji pobieranie informacji o pozycji urządzenia, skonfiguruj sesję i ustaw tryb
DeviceTrackingMode.SPATIAL_LAST_KNOWN:
// Define the configuration object to enable tracking device pose. val newConfig = session.config.copy( deviceTracking = DeviceTrackingMode.LAST_KNOWN ) // Apply the configuration to the session. try { when (val configResult = session.configure(newConfig)) { is SessionConfigureSuccess -> { // The session is now configured to track the device's pose. } else -> { // Catch-all for other configuration errors returned using the result class. } } } catch (e: UnsupportedOperationException) { // Handle configuration failure. For example, if the specific mode is not supported on the current device or API version. }
Nie wszystkie urządzenia XR obsługują tryb DeviceTrackingMode.SPATIAL_LAST_KNOWN. Jeśli
Session.configure() zakończy się powodzeniem, urządzenie obsługuje ten tryb.
Uzyskiwanie pozycji urządzenia
Po skonfigurowaniu sesji możesz uzyskać pozycję urządzenia w układzie współrzędnych
AR za pomocą obiektu ArDevice:
// Get the ArDevice instance val arDevice = ArDevice.getInstance(session) // There are two ways to get the device pose. // 1. Get the current device pose once. // This is the device's position and orientation relative to the tracking origin. val devicePose = arDevice.state.value.devicePose processDevicePose(devicePose) // 2. Continuously receive updates for the device pose. // `collect` is a suspending function that will run indefinitely and process new poses. arDevice.state.collect { state -> processDevicePose(state.devicePose) }
Pobieranie przesunięcia i obrotu pozycji urządzenia
Pose urządzenia reprezentuje jego położenie (przesunięcie) i orientację (obrót) względem początku układu współrzędnych śledzenia. Użyj tych informacji w aplikacji, aby poprawić jej działanie:
Podawanie dokładnych instrukcji nawigacyjnych: dane o położeniu mogą pomóc użytkownikowi zorientować się w otoczeniu i poruszać się po nim dzięki nakładanym treściom cyfrowym.
Obliczanie pośredniego wyrównania świata: ta pozycja jest wykorzystywana przez Geospatial API do obliczania lokalizacji w świecie rzeczywistym.
fun processDevicePose(pose: Pose) { // Extract Translation and Rotation val translation = pose.translation // Vector3(x, y, z) val rotation = pose.rotation // Quaternion (x, y, z, w) TODO(/* Use the translation and rotation in your app. */) }
Konwertowanie pozycji urządzenia na pozycję geoprzestrzenną
Gdy masz już pozycję urządzenia, możesz uzyskać z niej pozycję geoprzestrzenną. Dzięki konwersji na pozycję geoprzestrzenną treści AR stają się stałą, powszechnie udostępnianą i uwzględniającą kontekst funkcją w świecie rzeczywistym.
Więcej informacji o konwertowaniu pozycji urządzenia na pozycję geoprzestrzenną znajdziesz w dokumentacji Geospatial API.