Detectar planos usando o ARCore para o Jetpack XR

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Headsets de realidade estendida
Óculos XR com fio

O ARCore para Jetpack XR pode detectar superfícies planas no ambiente do usuário e fornecer informações sobre elas, como posição, tamanho e orientação. Isso pode ajudar seu app a encontrar superfícies como mesas para colocar objetos.

Acessar uma sessão

Acesse informações de plano usando um Session do ARCore para Jetpack XR. Se você estiver aprimorando a interface espacial usando o Jetpack Compose para XR, acesse uma sessão do Jetpack Compose para XR. Se você estiver trabalhando com entidades espacializadas da biblioteca Jetpack SceneCore, acesse uma sessão do Jetpack XR Runtime.

Configurar a sessão

A detecção de planos não está ativada por padrão nas sessões de RV/RA. Para ativar o rastreamento de planos, configure a sessão e defina o modo PlaneTrackingMode.HORIZONTAL_AND_VERTICAL:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Recuperar o estado de planos percebidos

O ARCore para Jetpack XR fornece o estado dos planos por um StateFlow que emite o estado dos planos. Ao assinar planos em uma sessão, seu app recebe uma notificação quando planos são adicionados, atualizados ou removidos.

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

Um plano tem as seguintes propriedades:

  • label: uma descrição semântica de um determinado Plane. Pode ser um WALL, FLOOR, CEILING ou TABLE.
  • centerPose: a postura do centro do plano detectado.
  • extents: as dimensões do plano detectado, em metros.
  • vertices: uma lista de vértices de um polígono convexo que se aproxima do plano.

Realizar um teste de hit em planos

Um teste de hit é um método de calcular a interseção de um raio com objetos rastreados pela sessão. Uma aplicação comum de um teste de hit é apontar para uma mesa e colocar um objeto nesse local. A realização de um teste de hit resulta em uma lista de objetos atingidos. Em outras palavras, um teste de ocorrência não para no primeiro objeto atingido. No entanto, muitas vezes, você pode ter interesse apenas no primeiro acerto de objeto de um determinado tipo.

Para realizar um teste de hit, use Interaction.hitTest() com um Ray:

val results = androidx.xr.arcore.hitTest(session, ray)
// When interested in the first Table hit:
val tableHit = results.firstOrNull {
    val trackable = it.trackable
    trackable is Plane && trackable.state.value.label == Plane.Label.TABLE
}