Tworzenie punktów orientacyjnych za pomocą ARCore w Jetpack XR

Kotwica opisuje stałą lokalizację i orientację w świecie rzeczywistym. Przymocowanie obiektu do punktu zakotwiczenia sprawia, że obiekt wygląda realistycznie w świecie rzeczywistym.

Tworzenie sesji ARCore w Jetpack XR

Twórz kotwice w sesji ARCore w Jetpack XR. Aby uzyskać Session, przeczytaj artykuł Omówienie cyklu życia sesji.

Konfigurowanie sesji

Tworzenie i wczytywanie kotwic nie wymaga skonfigurowania sesji. Jednak w sesjach XR trwałość kotwic nie jest domyślnie włączona. Aby utrwalać i wczytywać kotwice z pamięci lokalnej, skonfiguruj sesję i ustaw tryb AnchorPersistenceMode.LOCAL:

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.LOCAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* A different unhandled exception was thrown. */)
}

Przytwierdzanie treści do stałego miejsca w przestrzeni

Punkt zakotwiczenia jest tworzony za pomocą elementu Pose, który może być interpretowany względem istniejącego elementu Trackable lub nie.

Tworzenie kotwicy względem obiektu Trackable

Gdy kotwica jest tworzona względem Trackable, np. Plane, dzięki czemu kotwica podąża za dołączonym Trackable, gdy ten porusza się w przestrzeni.

when (val result = trackable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Tworzenie kotwicy bez obiektu Trackable

Aby utworzyć kotwicę, która nie jest dołączona do Trackable:

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Dołączanie elementu do kotwicy

Aby wyrenderować model w tej lokalizacji, utwórz GltfModel i ustaw jego element nadrzędny na AnchorEntity.

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

Informacje o stanie śledzenia

Każdy Trackable ma TrackingState, który należy sprawdzić przed użyciem. Trackable, który ma TrackableState o wartości Tracking, jest aktywnie aktualizowany przez system.Pose Trackable, które jest Paused, może w przyszłości stać się Tracking, natomiast Stopped nigdy nie stanie się Tracking.

Zachowywanie kotwicy w sesjach

Kotwica, która nie jest trwale zapisana, znika po zakończeniu sesji. Zapisując kotwicę, aplikacja zapamiętuje jej położenie w prywatnych danych aplikacji. Można go pobrać w kolejnej sesji i jest on zakotwiczony w tym samym miejscu na świecie.

Aby utrwalić kotwicę, użyj Anchor.persist(), jak pokazano poniżej:

val uuid = anchor.persist()

Aplikacja może pobrać kotwicę, używając w przyszłej sesji funkcji UUID:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

Gdy kotwica nie będzie już potrzebna, kliknij unpersist(). Spowoduje to usunięcie kotwicy z pamięci aplikacji i uniemożliwi pobranie danego identyfikatora UUID w przypadku wywołań funkcji Anchor.load().

Anchor.unpersist(session, uuid)

Aplikacja może też poprosić o listę wszystkich zapisanych kotwic, które nadal znajdują się w pamięci aplikacji:

val uuids = Anchor.getPersistedAnchorUuids(session)