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

Punkt kotwiczenia określa stałą lokalizację i orientację w świecie rzeczywistym. Dodanie obiektu do punktu zakotwiczenia pomaga w realistycznym umieszczeniu obiektów w świecie rzeczywistym.

Tworzenie sesji ARCore na potrzeby Jetpack XR

Tworzenie punktów kotwiczenia w ramach sesji Jetpack XR dla ARCore. Aby uzyskać Session, zapoznaj się z artykułem Omówienie cyklu życia sesji.

Konfigurowanie sesji

Tworzenie i wczytywanie kotwic nie wymaga konfiguracji sesji. Jednak w sesjach XR trwałość kotwicy nie jest domyślnie włączona. Aby zachować i załadować kotwy, skonfiguruj sesję:

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.Enabled,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

zakotwiczenie treści w stałym miejscu w przestrzeni,

Kotwica jest tworzona za pomocą elementu Pose, który może być interpretowany w stosunku do istniejącego elementu Trackable lub nie.

Tworzenie kotwicy względem śledzonego obiektu

Gdy kotwnik jest tworzony względem Trackable, np. Plane, co powoduje, że kotwnik 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 śledzenia

Aby utworzyć kotwicę, która nie jest powiązana z 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 tym miejscu, [utwórz element GltfModel][5] i ustaw jego element nadrzędny na AnchorEntity.

AnchorEntity.create(session, anchor).apply {
    setParent(session.activitySpace)
    addChild(entity)
}

Opis stanu śledzenia

Każdy Trackable ma TrackingState, który należy sprawdzić przed użyciem. TrackableTrackableState Tracking ma Pose aktywnie aktualizowane przez system. Element Trackable o wartości Paused może w przyszłości uzyskać wartość Tracking, natomiast element o wartości Stopped nigdy nie będzie miał wartości Tracking.

Zachowywanie punktu kotwiczenia w całości sesji

Kotwica, która nie jest trwała, znika po zakończeniu sesji. Dzięki zapisaniu kotwicy aplikacja zapamięta jej pozycję w swoich prywatnych danych. Ten punkt kotwiczenia można pobrać w kolejnych sesjach. Jest on zakotwiczony w tym samym miejscu na świecie.

Aby zachować kotwicę, użyj elementu anchor.persist(), jak pokazano tutaj:

val uuid = anchor.persist()

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

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

Gdy nie potrzebujesz już kotwicy, zadzwoń pod numer unpersist(). Spowoduje to usunięcie kotwicy z pamięci aplikacji i uniemożliwi odzyskanie podanego identyfikatora UUID w przypadku wywołań funkcji Anchor.load().

Anchor.unpersist(session, uuid)

Aplikacja może też poprosić o listę wszystkich zachowanych kotwic, które są nadal dostępne w pamięci aplikacji:

val uuids = Anchor.getPersistedAnchorUuids(session)