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 determinadoPlane. Pode ser umWALL,FLOOR,CEILINGouTABLE.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 }