Uma âncora descreve um local e uma orientação fixos no mundo real. A fixação de um objeto a uma âncora ajuda a mostrar objetos colocados de forma realista no mundo real.
Criar uma sessão do ARCore para o Jetpack XR
Crie âncoras usando uma sessão do ARCore para o Jetpack XR. Consulte
Entender o ciclo de vida de uma sessão
para receber uma Session
.
Configurar a sessão
A criação e o carregamento de âncoras não exigem que a sessão seja configurada. No entanto, a persistência de âncora não é ativada por padrão nas sessões de XR. Para manter e carregar âncoras, configure a sessão:
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! */) }
Fixar o conteúdo em um local fixo no espaço
Uma âncora é criada usando um Pose
, que pode ser
interpretado em relação a um Trackable
existente ou não.
Criar uma âncora relativa a um rastreável
Quando uma âncora é criada em relação a um Trackable
, como um Plane
, que
faz com que a âncora siga o Trackable
anexado quando ele se move pelo espaço.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Criar uma âncora sem um rastreável
Para criar uma âncora que não esteja anexada a um Trackable
:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Anexar uma entidade a uma âncora
Para renderizar um modelo nesse local, [crie um GltfModel
][5] e defina o pai
como um AnchorEntity
.
AnchorEntity.create(session, anchor).apply { setParent(session.activitySpace) addChild(entity) }
Entender o TrackingState
Cada Trackable
tem um TrackingState
que precisa ser verificado antes de ser usado.
Um Trackable
com um TrackableState
de Tracking
tem o Pose
atualizado
ativamente pelo sistema. Um Trackable
que é Paused
pode se tornar Tracking
no
futuro, enquanto um que é Stopped
nunca se tornará Tracking
.
Manter uma âncora em todas as sessões
Uma âncora que não é mantida desaparece depois que uma sessão é destruída. Ao persistir uma âncora, o app lembra a posição dela nos dados particulares. Essa âncora pode ser recuperada em uma sessão subsequente e é ancorada no mesmo local do mundo.
Para manter uma âncora, use anchor.persist()
, conforme mostrado
aqui:
val uuid = anchor.persist()
Seu app pode recuperar a âncora usando a UUID
em uma
sessão futura:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Quando você não precisar mais de uma âncora, chame
unpersist()
. Isso remove a âncora do armazenamento
do app e faz com que o UUID fornecido não possa ser recuperado para chamadas para
Anchor.load()
.
Anchor.unpersist(session, uuid)
O app também pode solicitar uma lista de todas as âncoras persistidas que ainda estão presentes no armazenamento do app:
val uuids = Anchor.getPersistedAnchorUuids(session)