Ad dizesi
XR_ANDROID_raycast
Uzantı Türü
Örnek uzatma
Kayıtlı Uzatma Numarası
464
Düzeltme
1
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2024-10-02
IP Durumu
Bilinen IP hak talepleri yok.
Katkıda bulunanlar
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Genel Bakış
Bu uzantı, uygulamanın ortamdaki takip edilebilir öğelere karşı ışın izleme gerçekleştirmesine olanak tanır. Işın izleme, ortamdaki bir ışının kesişeceği nesneleri algılamak için yararlı olabilir. Örneğin:
- Dikey bir ışın atışı kullanarak, yüzen bir nesnenin yere düştüğünde nereye düşeceğini belirlemek için kullanılır.
 - Kullanıcının nereye baktığını belirlemek için ileriye dönük bir ışın ışını kullanarak.
 
Desteklenen ışın izleme özelliklerini sorgulayın
xrEnumerateRaycastSupportedTrackableTypesANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    trackableTypeCapacityInput,
    uint32_t*                                   trackableTypeCountOutput,
    XrTrackableTypeANDROID*                     trackableTypes);
Parametre Açıklamaları
instance,systemId'ın alındığı XrInstance'tır.systemId, ışın izleme için desteklenen izlenebilir türlerinin listelendiğiXrSystemIdbağımsız değişkenidir.trackableTypeCapacityInput,trackableTypesöğesinin kapasitesidir veya gerekli kapasiteyi almak için 0 değerini alır.trackableTypeCountOutput, dizinin sayısının işaretçisidir veyatrackableTypeCapacityInputyetersiz olduğunda gerekli kapasitenin işaretçisidir.trackableTypes, XrTrackableTypeANDROID dizisinin işaretçisidir ancaktrackableTypeCapacityInput0iseNULLolabilir.
- Gerekli 
trackableTypesboyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın. 
xrEnumerateRaycastSupportedTrackableTypesANDROID, mevcut oturum tarafından ışın izlemeyi destekleyen izlenebilir türleri listeler.
Geçerli Kullanım (Dolayı)
- xrEnumerateRaycastSupportedTrackableTypesANDROID çağrılmadan önce 
XR_ANDROID_raycastuzantısı etkinleştirilmelidir. instancegeçerli bir XrInstance herkese açık kullanıcı adı olmalıdır.trackableTypeCountOutput,uint32_tdeğerine işaret eden bir işaretçi olmalıdır.trackableTypeCapacityInput,0değilsetrackableTypes,trackableTypeCapacityInputXrTrackableTypeANDROID değer dizisinin işaretçisi olmalıdır.
İade Kodları
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
Işın izleme gerçekleştirme
xrRaycastANDROID işlevi şu şekilde tanımlanır:
XrResult xrRaycastANDROID(
    XrSession                                   session,
    const XrRaycastInfoANDROID*                 rayInfo,
    XrRaycastHitResultsANDROID*                 results);
Parametre Açıklamaları
session, ışın izlemeyi gerçekleştiren XrSession'dir.rayInfo, gönderilecek ışını açıklayan XrRaycastInfoANDROID öğesidir.results, ışın izlemenin sonuçlarını alan XrRaycastHitResultsANDROID işaretçisidir.
Uygulama, xrRaycastANDROID'ı çağırarak ışın izleme işlemi yapabilir.
- Bir ışın izleme, XrRaycastHitResultsANDROID::maxResults değerinden daha fazla izlenebilirle kesişiyorsa çalışma zamanı, ışının XrRaycastHitResultsANDROID::origin değerine en yakın isabet sonuçlarını iade etmelidir.
 - Bir ışın izleme, başka bir düzlem tarafından kapsanan 
XR_TRACKABLE_TYPE_ANDROID_PLANEtüründeki bir izlenebilirle kesişiyorsa çalışma zamanı yalnızca kapsayan düzlem için isabet sonucunu döndürmelidir. - Çalışma zamanı, isabet sonuçlarını XrRaycastInfoANDROID::trajectory vektörü boyunca XrRaycastInfoANDROID::origin'den en yakından en uzağa doğru sırayla iade etmelidir.
 - XrRaycastInfoANDROID::trackers içindeki XrTrackableTrackerANDROID tutamaçlarına karşılık gelen izlenebilir tür, xrEnumerateRaycastSupportedTrackableTypesANDROID tarafından numaralandırılmamışsa çalışma zamanı 
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDdöndürmelidir. 
Geçerli Kullanım (Dolayı)
- xrRaycastANDROID çağrılmadan önce 
XR_ANDROID_raycastuzantısı etkinleştirilmelidir. sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır.rayInfo, geçerli bir XrRaycastInfoANDROID yapısına işaretçi olmalıdırresults, XrRaycastHitResultsANDROID yapısına işaret eden bir olmalıdır
İade Kodları
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
XrRaycastInfoANDROID yapısı şu şekilde tanımlanır:
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;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.maxResults, döndürülecek maksimum sonuç sayısıdır (uint32_t).trackerCount,trackersdizisininuint32_tsayısıdır.trackers, yayınlanan ışının test edilmesi gereken XrTrackableTrackerANDROID dizisidir.origin, ışının gönderildiği XrVector3f bağımsız değişkenidir.trajectory, ışının hedeflediği XrVector3f öğesidir.space, ışının gönderildiği XrSpace'tir.time, ışının gönderildiğiXrTimeöğesidir.
XrRaycastInfoANDROID yapısı, gönderilecek ışını tanımlar.
- XrRaycastInfoANDROID::trackers dizisi farklı türde izleyiciler içerebilir.
 - XrRaycastInfoANDROID::trackers dizisi aynı türden birden fazla izleyici içermemelidir. Aksi takdirde çalışma zamanı 
XR_ERROR_VALIDATION_FAILUREdöndürmelidir. 
Geçerli Kullanım (Dolayı)
- XrRaycastInfoANDROID kullanılmadan önce 
XR_ANDROID_raycastuzantısı etkinleştirilmelidir. typeXR_TYPE_RAYCAST_INFO_ANDROIDolmalıdırnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.trackersolmalıdırtrackerCountgeçerli XrTrackableTrackerANDROID mülklerinin dizisine işaret eden bir işaretçispacegeçerli bir XrSpace herkese açık kullanıcı adı olmalıdır.trackerCountparametresi0değerinden büyük olmalıdır.- Hem 
spacehem detrackersöğeleri aynı XrSession'de oluşturulmuş, ayrılmış veya alınmış olmalıdır. 
XrRaycastHitResultsANDROID yapısı şu şekilde tanımlanır:
typedef struct XrRaycastHitResultsANDROID {
    XrStructureType               type;
    void*                         next;
    uint32_t                      resultsCapacityInput;
    uint32_t                      resultsCountOutput;
    XrRaycastHitResultANDROID*    results;
} XrRaycastHitResultsANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.resultsCapacityInput,resultsdizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0 değerini alır.resultsCountOutput, yazılanresultssayısının işaretçisidir veyaresultsCapacityInputyetersiz olduğunda gereken kapasitenin işaretçisidir.results, XrRaycastHitResultANDROID yapılarının dizisine işaret eden bir işaretçidir.resultsCapacityInput0 iseNULLolabilir.- Gerekli 
resultsboyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın. 
XrRaycastHitResultsANDROID, bir ışın izlemenin isabet dizisini içerir.
Çalışma zamanı, resultsCountOutput değerini XrRaycastInfoANDROID::maxResults değerinden küçük veya bu değere eşit olacak şekilde ayarlamalıdır.
Geçerli Kullanım (Dolayı)
- XrRaycastHitResultsANDROID işlevi kullanılmadan önce 
XR_ANDROID_raycastuzantısı etkinleştirilmelidir. typeXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDolmalıdırnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.resultsresultsCapacityInputXrRaycastHitResultANDROID tabanlı yapıların dizisine işaret eden bir işaretçi olmalıdır.resultsCapacityInputparametresi0değerinden büyük olmalıdır.
XrRaycastHitResultANDROID yapısı şu şekilde tanımlanır:
typedef struct XrRaycastHitResultANDROID {
    XrTrackableTypeANDROID    type;
    XrTrackableANDROID        trackable;
    XrPosef                   pose;
} XrRaycastHitResultANDROID;
Üye Açıklamaları
type, ışın izlemenin isabet ettiği izlenebilir öğenin XrTrackableTypeANDROID değeridir.trackable, ışın izlemenin isabet ettiğiXrTrackableANDROIDveya izlenebilirtypeXR_NULL_TRACKABLE_ANDROIDiseXR_TRACKABLE_TYPE_DEPTH_ANDROIDolur.pose, ışın izlemenin isabet ettiği XrPosef öğesidir.
XrRaycastHitResultANDROID, bir ışın izleme isabetinin ayrıntılarını içerir.
Bir düzlem isabeti için XrRaycastHitResultANDROID::pose, X ve Z'nin düzleme paralel, Y ekseninin ise düzleme normal olacak şekilde olmalıdır.
İzlenebilir isabet türü  | 
    Açıklama  | 
  
  | 
    Bir noktanın doğru derinliğini ve yönünü belirlemek için yatay ve/veya dikey yüzeylere çarpar.  | 
  
  | 
    Bir noktanın doğru derinliğini ve yönünü belirlemek için sahnenin tamamındaki derinlik bilgilerini kullanır.  | 
  
Geçerli Kullanım (Dolayı)
- XrRaycastHitResultANDROID işlevi kullanılmadan önce 
XR_ANDROID_raycastuzantısı etkinleştirilmelidir. typegeçerli bir XrTrackableTypeANDROID değeri olmalıdır.
Işın izleme için örnek kod
Aşağıdaki örnek kodda, ışın izlemenin nasıl yapılacağı gösterilmektedir.
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]
}
Yeni Enum Constants
XrStructureType dizini aşağıdakilerle genişletildi:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
Yeni Yapılar
Yeni İşlevler
Sorunlar
Sürüm Geçmişi
- 1. Düzeltme, 02.10.2024 (Kenny Vercaemer)
- İlk uzantı açıklaması
 
 
OpenXR™ ve OpenXR logosu, The Khronos Group Inc. şirketinin tescilli ticari markalarıdır ve Çin, Avrupa Birliği, Japonya ve Birleşik Krallık'ta ticari marka olarak tescil edilmiştir.