Stringa del nome
XR_ANDROID_raycast
Tipo di estensione
Estensione dell'istanza
Numero di estensione registrato
464
Revisione
1
Dipendenze di estensioni e versioni
Data ultima modifica
2024-10-02
Stato IP
Nessuna rivendicazione IP nota.
Collaboratori
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Panoramica
Questa estensione consente all'applicazione di eseguire raycast sui rilevabili nell'ambiente. I raycast possono essere utili per rilevare gli oggetti nell'ambiente con cui un raggio si intersecherà. Ad esempio:
- Per determinare dove cadrà un oggetto galleggiante quando viene rilasciato, utilizzando un raycast verticale.
- Per determinare dove sta guardando un utente, utilizzando un raggio di ricerca in avanti.
Esegui query sulle funzionalità di raycast supportate
La funzione xrEnumerateRaycastSupportedTrackableTypesANDROID è definita come segue:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Descrizioni dei parametri
instanceè l'XrInstance da cui è stato recuperatosystemId.systemIdè l'XrSystemIddi cui vengono enumerati i tipi tracciabili supportati per il raycasting.trackableTypeCapacityInputè la capacità deltrackableTypeso 0 per recuperare la capacità richiesta.trackableTypeCountOutputè un puntatore al conteggio dell'array o un puntatore alla capacità richiesta nel caso in cuitrackableTypeCapacityInputsia insufficiente.trackableTypesè un puntatore a un array di XrTrackableTypeANDROID, ma può essereNULLsetrackableTypeCapacityInputè0.
- Per una descrizione dettagliata del recupero della dimensione
trackableTypesrichiesta, consulta la sezione Parametri di dimensione del buffer.
xrEnumerateRaycastSupportedTrackableTypesANDROID enumera i tipi di elementi tracciabili che supportano il raycasting dalla sessione corrente.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_raycastdeve essere attivata prima di chiamare xrEnumerateRaycastSupportedTrackableTypesANDROID instancedeve essere un handle XrInstance validotrackableTypeCountOutputdeve essere un puntatore a un valoreuint32_t- Se
trackableTypeCapacityInputnon è0,trackableTypesdeve essere un puntatore a un array di valoritrackableTypeCapacityInputXrTrackableTypeANDROID
Codici di ritorno
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
Esegui un raycast
La funzione xrRaycastANDROID è definita come:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
Descrizioni dei parametri
sessionè la XrSession che esegue il raycast.rayInfoè l'oggetto XrRaycastInfoANDROID che descrive il raggio da emettere.resultsè un puntatore a XrRaycastHitResultsANDROID che riceve i risultati del raycast.
L'applicazione può eseguire raycast chiamando xrRaycastANDROID.
- Se un raycast interseca più elementi tracciabili rispetto a XrRaycastHitResultsANDROID::maxResults, il runtime deve restituire i risultati relativi agli hit più vicini a XrRaycastHitResultsANDROID::origin del raggio.
- Se un raycast interseca un elemento tracciabile di tipo
XR_TRACKABLE_TYPE_ANDROID_PLANE, che è incluso in un altro piano, il runtime deve restituire il risultato di hit solo per il piano che include. - Il runtime deve restituire i risultati di hit in ordine dal più vicino al più lontano da XrRaycastInfoANDROID::origin lungo il vettore XrRaycastInfoANDROID::trajectory.
- Il runtime deve restituire
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDse il tipo di rilevamento corrispondente agli handle XrTrackableTrackerANDROID in XrRaycastInfoANDROID::trackers non è enumerato da xrEnumerateRaycastSupportedTrackableTypesANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_raycastdeve essere attivata prima di chiamare xrRaycastANDROID sessiondeve essere un handle XrSession validorayInfodeve essere un puntatore a una struttura XrRaycastInfoANDROID validaresultsdeve essere un puntatore a una struttura XrRaycastHitResultsANDROID
Codici di ritorno
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
La struttura XrRaycastInfoANDROID è definita come:
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;
Descrizioni dei membri
typeè il XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.maxResultsè il numero massimo di risultati da restituireuint32_t.trackerCountè il conteggiouint32_tdell'arraytrackers.trackersè l'array di XrTrackableTrackerANDROID rispetto al quale deve essere testato il raggio proiettato.originè il XrVector3f da cui viene lanciato il raggio.trajectoryè il XrVector3f a cui è indirizzato il raggio.spaceè lo spazio XrSpace in cui viene lanciato il raggio.timeè ilXrTimea cui viene lanciato il raggio.
La struttura XrRaycastInfoANDROID descrive il raggio da lanciare.
- L'array XrRaycastInfoANDROID::trackers può contenere tracker di tipi diversi.
- L'array XrRaycastInfoANDROID::trackers non deve contenere più tracker dello stesso tipo, altrimenti il runtime deve restituire
XR_ERROR_VALIDATION_FAILURE.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_raycastdeve essere attivata prima di utilizzare XrRaycastInfoANDROID typedeve essereXR_TYPE_RAYCAST_INFO_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutturetrackersdeve essere un puntatore a un array ditrackerCounthandle XrTrackableTrackerANDROID validispacedeve essere un handle XrSpace valido- Il parametro
trackerCountdeve essere maggiore di0 - Sia
spacesia gli elementi ditrackersdevono essere stati creati, assegnati o recuperati dalla stessa XrSession
La struttura XrRaycastHitResultsANDROID è definita come:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
Descrizioni dei membri
typeè il XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.resultsCapacityInputè la capacità dell'arrayresultso 0 per indicare una richiesta di recupero della capacità richiesta.resultsCountOutputè un puntatore al conteggio diresultsscritto o un puntatore alla capacità richiesta nel caso in cuiresultsCapacityInputsia insufficiente.resultsè un puntatore a un array di strutture XrRaycastHitResultANDROID. Può essereNULLseresultsCapacityInputè 0.- Consulta la sezione Parametri relativi alle dimensioni del buffer per una descrizione dettagliata del recupero della dimensione
resultsrichiesta.
XrRaycastHitResultsANDROID contiene l'array di hit di un raycast.
Il runtime deve impostare resultsCountOutput su un valore inferiore o uguale a
XrRaycastInfoANDROID::maxResults.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_raycastdeve essere attivata prima di utilizzare XrRaycastHitResultsANDROID typedeve essereXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di struttureresultsdeve essere un puntatore a un array di struttureresultsCapacityInputXrRaycastHitResultANDROID-based- Il parametro
resultsCapacityInputdeve essere maggiore di0
La struttura XrRaycastHitResultANDROID è definita come:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
Descrizioni dei membri
typeè il XrTrackableTypeANDROID del rilevabile colpito dal raycast.trackableè ilXrTrackableANDROIDcolpito dal raycast oXR_NULL_TRACKABLE_ANDROIDse iltypetracciabile eraXR_TRACKABLE_TYPE_DEPTH_ANDROID.poseè l'XrPosef colpito dal raycast.
XrRaycastHitResultANDROID contiene i dettagli di un rilevamento di un raggio.
XrRaycastHitResultANDROID::pose per un impatto con un piano deve essere tale che X e Z siano paralleli al piano e l'asse Y sia normale al piano.
Tipo di hit tracciabile |
Descrizione |
|
Colpisce superfici orizzontali e/o verticali per determinare la profondità e l'orientamento corretti di un punto. |
|
Utilizza le informazioni sulla profondità dell'intera scena per determinare la profondità e l'orientamento corretti di un punto. |
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_raycastdeve essere attivata prima di utilizzare XrRaycastHitResultANDROID typedeve essere un valore XrTrackableTypeANDROID valido
Codice di esempio per il raycasting
Il seguente codice di esempio mostra come eseguire raycast.
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]
}
Nuove costanti enum
L'enumerazione XrStructureType è stata estesa con:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
Nuove strutture
Nuove funzioni
Problemi
Cronologia delle versioni
- Revisione 1, 02/10/2024 (Kenny Vercaemer)
- Descrizione iniziale dell'estensione
OpenXR™ e il logo OpenXR sono marchi di proprietà di The Khronos Group Inc. e sono registrati come marchi in Cina, nell'Unione Europea, in Giappone e nel Regno Unito.