String de nome
XR_ANDROID_raycast
Tipo de extensão
Extensão de instância
Número de extensão registrado
464
Revisão
1
Dependências de extensão e versão
Data da última modificação
2024-10-02
Status do IP
Nenhuma reivindicação de IP conhecida.
Colaboradores
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Visão geral
Essa extensão permite que o aplicativo realize raycasts contra rastreáveis no ambiente. Os raycasts podem ser úteis para detectar objetos no ambiente com que um raio se cruzaria. Exemplo:
- Para determinar onde um objeto flutuante cairia quando fosse solto, usando um raycast vertical.
- Para determinar para onde um usuário está olhando, use um raycast voltado para a frente.
Consultar recursos de raycast compatíveis
A função xrEnumerateRaycastSupportedTrackableTypesANDROID é definida como:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Descrições dos parâmetros
instanceé a XrInstance de ondesystemIdfoi extraído.systemIdé oXrSystemIdcujos tipos rastreáveis com suporte para raycasting estão sendo enumerados.trackableTypeCapacityInputé a capacidade dotrackableTypesou 0 para recuperar a capacidade necessária.trackableTypeCountOutputé um ponteiro para a contagem da matriz ou um ponteiro para a capacidade necessária casotrackableTypeCapacityInputseja insuficiente.trackableTypesé um ponteiro para uma matriz de XrTrackableTypeANDROID, mas pode serNULLsetrackableTypeCapacityInputfor0.
- Consulte a seção Parâmetros de tamanho do buffer para conferir uma descrição detalhada de
como recuperar o tamanho
trackableTypesnecessário.
xrEnumerateRaycastSupportedTrackableTypesANDROID enumera os tipos rastreáveis que oferecem suporte a raycasting pela sessão atual.
Uso válido (implícito)
- A extensão
XR_ANDROID_raycastprecisa ser ativada antes de chamar xrEnumerateRaycastSupportedTrackableTypesANDROID. instanceprecisa ser um identificador XrInstance válidotrackableTypeCountOutputprecisa ser um ponteiro para um valoruint32_t- Se
trackableTypeCapacityInputnão for0,trackableTypesprecisa ser um ponteiro para uma matriz de valorestrackableTypeCapacityInputXrTrackableTypeANDROID
Códigos de retorno
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
Realizar um raycast
A função xrRaycastANDROID é definida como:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
Descrições dos parâmetros
sessioné a XrSession que executa o raycast.rayInfoé o XrRaycastInfoANDROID que descreve o feixe a ser enviado.resultsé um ponteiro para o XrRaycastHitResultsANDROID que recebe os resultados do raycast.
O aplicativo pode executar raycasts chamando xrRaycastANDROID.
- Se um raycast cruzar mais elementos rastreáveis do que XrRaycastHitResultsANDROID::maxResults, o ambiente de execução precisa retornar os resultados de acerto mais próximos de XrRaycastHitResultsANDROID::origin do raio.
- Se um raycast cruzar um rastreável do tipo
XR_TRACKABLE_TYPE_ANDROID_PLANE, que é absorvido por outro plano, o ambiente de execução precisa retornar o resultado do hit apenas para o plano de absorção. - O ambiente de execução precisa retornar os resultados de acertos na ordem mais próximo-mais distante de XrRaycastInfoANDROID::origin ao longo do vetor XrRaycastInfoANDROID::trajectory.
- O ambiente de execução precisa retornar
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDse o tipo rastreável correspondente aos identificadores XrTrackableTrackerANDROID em XrRaycastInfoANDROID::trackers não for enumerado por xrEnumerateRaycastSupportedTrackableTypesANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_raycastprecisa ser ativada antes de chamar xrRaycastANDROID. sessionprecisa ser um identificador XrSession válidorayInfoprecisa ser um ponteiro para uma estrutura XrRaycastInfoANDROID válida.resultsprecisa ser um ponteiro para uma estrutura XrRaycastHitResultsANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_POSE_INVALIDXR_ERROR_TIME_INVALIDXR_ERROR_FEATURE_UNSUPPORTED
A estrutura XrRaycastInfoANDROID é definida como:
typedef struct XrRaycastInfoANDROID {
XrStructureType type;
void* next;
uint32_t maxResults;
uint32_t trackerCount;
const XrTrackableTrackerANDROID* trackers;
XrVector3f origin;
XrVector3f trajectory;
XrSpace space;
XrTime time;
} XrRaycastInfoANDROID;
Descrições dos participantes
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.maxResultsé o número máximo de resultados a serem retornados pelauint32_t.trackerCounté a contagem deuint32_tda matriztrackers.trackersé a matriz de XrTrackableTrackerANDROID que o raio fundido deve ser testado.originé o XrVector3f de onde o raio é lançado.trajectoryé o XrVector3f em que o raio é direcionado.spaceé o XrSpace em que o raio é lançado.timeé oXrTimeem que o raio é lançado.
A estrutura XrRaycastInfoANDROID descreve o feixe a ser transmitido.
- A matriz XrRaycastInfoANDROID::trackers pode conter rastreadores de diferentes tipos.
- A matriz XrRaycastInfoANDROID::trackers não pode conter vários
rastreadores do mesmo tipo. Caso contrário, o ambiente de execução precisa retornar
XR_ERROR_VALIDATION_FAILURE.
Uso válido (implícito)
- A extensão
XR_ANDROID_raycastprecisa ser ativada antes de usar XrRaycastInfoANDROID. typeprecisa serXR_TYPE_RAYCAST_INFO_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.trackersprecisa ser um ponteiro para uma matriz de identificadores válidos XrTrackableTrackerANDROID detrackerCount.spaceprecisa ser um identificador XrSpace válido.- O parâmetro
trackerCountprecisa ser maior que0 spacee os elementos detrackersprecisam ter sido criados, alocados ou recuperados da mesma XrSession.
A estrutura XrRaycastHitResultsANDROID é definida como:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
Descrições dos participantes
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.resultsCapacityInputé a capacidade da matrizresultsou 0 para indicar uma solicitação para recuperar a capacidade necessária.resultsCountOutputé um ponteiro para a contagem deresultsgravada ou um ponteiro para a capacidade necessária casoresultsCapacityInputseja insuficiente.resultsé um ponteiro para uma matriz de estruturas XrRaycastHitResultANDROID. Pode serNULLseresultsCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para conferir uma descrição detalhada de
como recuperar o tamanho
resultsnecessário.
O XrRaycastHitResultsANDROID contém a matriz de acertos de um raycast.
O ambiente de execução precisa definir resultsCountOutput para ser menor ou igual a
XrRaycastInfoANDROID::maxResults.
Uso válido (implícito)
- A extensão
XR_ANDROID_raycastprecisa ser ativada antes de usar XrRaycastHitResultsANDROID. typeprecisa serXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.resultsprecisa ser um ponteiro para uma matriz de estruturasresultsCapacityInputbaseadas em XrRaycastHitResultANDROID- O parâmetro
resultsCapacityInputprecisa ser maior que0
A estrutura XrRaycastHitResultANDROID é definida como:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
Descrições dos participantes
typeé o XrTrackableTypeANDROID do rastreável que o raycast atingiu.trackableé oXrTrackableANDROIDque o raycast atingiu ouXR_NULL_TRACKABLE_ANDROID, se otyperastreável foiXR_TRACKABLE_TYPE_DEPTH_ANDROID.poseé o XrPosef que o raycast atingiu.
O XrRaycastHitResultANDROID contém os detalhes de um hit de raycast.
O XrRaycastHitResultANDROID::pose para um acerto de plano precisa ser de modo que X e Z sejam paralelos ao plano, e o eixo Y seja normal ao plano.
Tipo de hit rastreável |
Descrição |
|
Bate em superfícies horizontais e/ou verticais para determinar a profundidade e a orientação corretas de um ponto. |
|
Usa informações de profundidade de toda a cena para determinar a profundidade e a orientação corretas de um ponto. |
Uso válido (implícito)
- A extensão
XR_ANDROID_raycastprecisa ser ativada antes de usar XrRaycastHitResultANDROID. typeprecisa ser um valor válido de XrTrackableTypeANDROID
Exemplo de código para raycasting
O exemplo de código a seguir demonstra como realizar raycasts.
XrSession session; // previously initialized
XrTime updateTime; // previously initialized
XrSpace appSpace; // space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrPosef headPose; // latest pose of the HMD.
XrTrackableTrackerANDROID planeTracker; // tracker for plane trackables.
XrTrackableTrackerANDROID depthTracker; // tracker for depth trackables.
// Perform a raycast against multiple trackers.
XrTrackableTrackerANDROID trackers[] = {
&planeTracker,
&depthTracker,
};
XrRaycastInfoANDROID rayInfo = {XR_TYPE_RAYCAST_INFO_ANDROID};
rayInfo.trackerCount = sizeof(trackers) / sizeof(XrTrackableTrackerANDROID);
rayInfo.trackers = trackers;
rayInfo.origin = headPose.position;
rayInfo.trajectory = CalculateForwardDirectionFromHeadPose(headPose);
rayInfo.space = appSpace;
rayInfo.time = updateTime;
uint32_t totalHitResults = 0;
constexpr uint32 NUM_DESIRED_RESULTS = 2;
XrRaycastHitResultANDROID hitResult[NUM_DESIRED_RESULTS];
XrRaycastHitResultsANDROID hitResults = {XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID};
hitResults.maxResults = NUM_DESIRED_RESULTS;
hitResults.resultsCapacityInput = NUM_DESIRED_RESULTS;
hitResults.results = hitResult;
XrResult result = xrRaycastANDROID(session, &rayInfo, &hitResults);
if (result == XR_SUCCESS && hitResults.resultsCountOutput >= 1) {
// Hit results are returned in closest-to-farthest order in
// hitResults.results[0] .. hitResults.results[hitResults.resultsCountOutput - 1]
}
Novas constantes de tipo enumerado
A enumeração XrStructureType é ampliada com:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
Novas estruturas
Novas funções
Problemas
Histórico de versões
- Revisão 1, 02/10/2024 (Kenny Vercaemer)
- Descrição inicial da extensão
O OpenXR™ e o logotipo do OpenXR são marcas registradas do The Khronos Group Inc. e estão registrados como marca registrada na China, na União Europeia, no Japão e no Reino Unido.