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 dla Jetpack XR

Tworzenie punktów orientacyjnych w ramach sesji ARCore dla Jetpack XR. Aby uzyskać więcej informacji, przeczytaj artykuł Cykl życia sesji (Session).

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ą Pose, który może być interpretowany w stosunku do istniejącego Trackable lub nie.

Tworzenie kotwicy względem elementu śledzonego

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 i ustaw jego element nadrzędny na AnchorEntity.

AnchorEntity.create(session, anchor).apply {
    setParent(session.scene.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 zniszczeniu 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 Anchor.persist(), jak pokazano poniżej:

val uuid = anchor.persist()

Aplikacja może pobrać kotwicę, używając UUID w następnej 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 będziesz już potrzebować kotwicy, zadzwoń pod numer unpersist(). Spowoduje to usunięcie kotwicy z pamięci aplikacji i uniemożliwi odzyskanie podanego identyfikatora UUID przez wywołania 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)