String Nama
XR_ANDROID_raycast
Jenis Ekstensi
Ekstensi instance
Registered Extension Number
464
Revisi
1
Dependensi Ekstensi dan Versi
Tanggal Terakhir Diubah
2024-10-02
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi melakukan raycast terhadap objek yang dapat dilacak di lingkungan. Raycast dapat berguna untuk mendeteksi objek di lingkungan yang akan bersimpangan dengan sinar. Contoh:
- Untuk menentukan tempat objek mengambang akan jatuh saat dijatuhkan, dengan menggunakan raycast vertikal.
- Untuk menentukan tempat pengguna melihat, dengan menggunakan raycast yang menghadap ke depan.
Kemampuan raycast yang didukung kueri
Fungsi xrEnumerateRaycastSupportedTrackableTypesANDROID ditentukan sebagai:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    trackableTypeCapacityInput,
    uint32_t*                                   trackableTypeCountOutput,
    XrTrackableTypeANDROID*                     trackableTypes);
Deskripsi Parameter
- instanceadalah XrInstance tempat- systemIddiambil.
- systemIdadalah- XrSystemIdyang jenis yang dapat dilacak dan didukung untuk raycasting sedang dihitung.
- trackableTypeCapacityInputadalah kapasitas- trackableTypes, atau 0 untuk mengambil kapasitas yang diperlukan.
- trackableTypeCountOutputadalah pointer ke jumlah array, atau pointer ke kapasitas yang diperlukan jika- trackableTypeCapacityInputtidak memadai.- trackableTypesadalah pointer ke array XrTrackableTypeANDROID, tetapi dapat berupa- NULLjika- trackableTypeCapacityInputadalah- 0.
 
- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi lengkap
pengambilan ukuran trackableTypesyang diperlukan.
xrEnumerateRaycastSupportedTrackableTypesANDROID mengenumerasi jenis yang dapat dilacak yang mendukung raycasting oleh sesi saat ini.
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_raycastharus diaktifkan sebelum memanggil xrEnumerateRaycastSupportedTrackableTypesANDROID
- instanceharus berupa nama sebutan channel XrInstance yang valid
- trackableTypeCountOutputharus berupa pointer ke nilai- uint32_t
- Jika trackableTypeCapacityInputbukan0,trackableTypesharus berupa pointer ke array nilaitrackableTypeCapacityInputXrTrackableTypeANDROID
Kode Status
- XR_SUCCESS
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SIZE_INSUFFICIENT
- XR_ERROR_SYSTEM_INVALID
- XR_ERROR_FUNCTION_UNSUPPORTED
Melakukan raycast
Fungsi xrRaycastANDROID ditentukan sebagai:
XrResult xrRaycastANDROID(
    XrSession                                   session,
    const XrRaycastInfoANDROID*                 rayInfo,
    XrRaycastHitResultsANDROID*                 results);
Deskripsi Parameter
- sessionadalah XrSession yang melakukan raycast.
- rayInfoadalah XrRaycastInfoANDROID yang menjelaskan sinar yang akan dipancarkan.
- resultsadalah pointer ke XrRaycastHitResultsANDROID yang menerima hasil raycast.
Aplikasi dapat melakukan raycast dengan memanggil xrRaycastANDROID.
- Jika raycast memotong lebih banyak objek yang dapat dilacak daripada XrRaycastHitResultsANDROID::maxResults, runtime harus menampilkan hasil hit yang paling dekat dengan XrRaycastHitResultsANDROID::origin sinar.
- Jika raycast memotong trackable dari jenis
XR_TRACKABLE_TYPE_ANDROID_PLANE, yang digabungkan oleh bidang lain, runtime harus menampilkan hasil hit hanya untuk bidang yang digabungkan.
- Runtime harus menampilkan hasil hit dalam urutan terdekat ke terjauh dari XrRaycastInfoANDROID::origin di sepanjang vektor XrRaycastInfoANDROID::trajectory.
- Runtime harus menampilkan XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDjika jenis yang dapat dilacak yang sesuai dengan handle XrTrackableTrackerANDROID di XrRaycastInfoANDROID::trackers tidak dihitung oleh xrEnumerateRaycastSupportedTrackableTypesANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_raycastharus diaktifkan sebelum memanggil xrRaycastANDROID
- sessionharus berupa nama sebutan channel XrSession yang valid
- rayInfoharus berupa pointer ke struktur XrRaycastInfoANDROID yang valid
- resultsharus berupa pointer ke struktur XrRaycastHitResultsANDROID
Kode Status
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_POSE_INVALID
- XR_ERROR_TIME_INVALID
- XR_ERROR_FEATURE_UNSUPPORTED
Struktur XrRaycastInfoANDROID ditentukan sebagai:
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;
Deskripsi Anggota
- typeadalah XrStructureType dari struktur ini.
- nextadalah- NULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
- maxResultsadalah jumlah maksimum hasil- uint32_tyang akan ditampilkan.
- trackerCountadalah jumlah- uint32_tdari array- trackers.
- trackersadalah array XrTrackableTrackerANDROID yang digunakan untuk menguji sinar yang ditransmisikan harus.
- originadalah XrVector3f tempat sinar dipancarkan.
- trajectoryadalah XrVector3f yang ditargetkan oleh sinar.
- spaceadalah XrSpace tempat sinar dipancarkan.
- timeadalah- XrTimetempat sinar dipancarkan.
Struktur XrRaycastInfoANDROID menjelaskan sinar yang akan ditransmisikan.
- Array XrRaycastInfoANDROID::trackers dapat berisi pelacak dari berbagai jenis.
- Array XrRaycastInfoANDROID::trackers harus tidak berisi beberapa
pelacak dari jenis yang sama. Jika tidak, runtime harus menampilkan
XR_ERROR_VALIDATION_FAILURE.
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_raycastharus diaktifkan sebelum menggunakan XrRaycastInfoANDROID
- typeharus berupa- XR_TYPE_RAYCAST_INFO_ANDROID
- nextharus berupa- NULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
- trackersharus berupa pointer ke array handle XrTrackableTrackerANDROID- trackerCountyang valid
- spaceharus berupa nama sebutan XrSpace yang valid
- Parameter trackerCountharus lebih besar dari0
- spacedan elemen- trackersharus telah dibuat, dialokasikan, atau diambil dari XrSession yang sama
Struktur XrRaycastHitResultsANDROID ditentukan sebagai:
typedef struct XrRaycastHitResultsANDROID {
    XrStructureType               type;
    void*                         next;
    uint32_t                      resultsCapacityInput;
    uint32_t                      resultsCountOutput;
    XrRaycastHitResultANDROID*    results;
} XrRaycastHitResultsANDROID;
Deskripsi Anggota
- typeadalah XrStructureType dari struktur ini.
- nextadalah- NULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
- resultsCapacityInputadalah kapasitas array- results, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.
- resultsCountOutputadalah pointer ke jumlah- resultsyang ditulis, atau pointer ke kapasitas yang diperlukan jika- resultsCapacityInputtidak memadai.
- resultsadalah pointer ke array struktur XrRaycastHitResultANDROID. Nilainya dapat berupa- NULLjika- resultsCapacityInputadalah 0.
- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi lengkap
pengambilan ukuran resultsyang diperlukan.
XrRaycastHitResultsANDROID berisi array hit raycast.
Runtime harus menetapkan resultsCountOutput agar kurang dari atau sama dengan
XrRaycastInfoANDROID::maxResults.
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_raycastharus diaktifkan sebelum menggunakan XrRaycastHitResultsANDROID
- typeharus berupa- XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
- nextharus berupa- NULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
- resultsharus berupa pointer ke array struktur- resultsCapacityInputberbasis XrRaycastHitResultANDROID
- Parameter resultsCapacityInputharus lebih besar dari0
Struktur XrRaycastHitResultANDROID ditentukan sebagai:
typedef struct XrRaycastHitResultANDROID {
    XrTrackableTypeANDROID    type;
    XrTrackableANDROID        trackable;
    XrPosef                   pose;
} XrRaycastHitResultANDROID;
Deskripsi Anggota
- typeadalah XrTrackableTypeANDROID dari trackable yang dihit raycast.
- trackableadalah- XrTrackableANDROIDyang terkena raycast, atau- XR_NULL_TRACKABLE_ANDROIDjika- typeyang dapat dilacak adalah- XR_TRACKABLE_TYPE_DEPTH_ANDROID.
- poseadalah XrPosef yang dihit raycast.
XrRaycastHitResultANDROID berisi detail hit raycast.
XrRaycastHitResultANDROID::pose untuk hit bidang harus sedemikian rupa sehingga X dan Z sejajar dengan bidang, dan sumbu Y normal terhadap bidang.
| Jenis hit yang dapat dilacak | Deskripsi | 
| 
 | Menampilkan permukaan horizontal dan/atau vertikal untuk menentukan kedalaman dan orientasi titik yang benar. | 
| 
 | Menggunakan informasi kedalaman dari seluruh tampilan untuk menentukan kedalaman dan orientasi titik yang benar. | 
Penggunaan yang Valid (Implisit)
- Ekstensi XR_ANDROID_raycastharus diaktifkan sebelum menggunakan XrRaycastHitResultANDROID
- typeharus berupa nilai XrTrackableTypeANDROID yang valid
Contoh kode untuk raycasting
Contoh kode berikut menunjukkan cara melakukan 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]
}
Konstanta Enum Baru
Enumerasi XrStructureType diperluas dengan:
- XR_TYPE_RAYCAST_INFO_ANDROID
- XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
Struktur Baru
Fungsi Baru
Masalah
Histori Versi
- Revisi 1, 02-10-2024 (Kenny Vercaemer)
- Deskripsi ekstensi awal
 
OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.
