สตริงชื่อ
XR_ANDROID_raycast
ประเภทชิ้นงาน
การขยายอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
464
การแก้ไข
1
การพึ่งพาส่วนขยายและเวอร์ชัน
วันที่แก้ไขล่าสุด
2024-10-02
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
ผู้เขียน
Spencer Quin จาก Google
Nihav Jain จาก Google
John Pursey จาก Google
Jared Finder จาก Google
Levana Chen จาก Google
Kenny Vercaemer จาก Google
ภาพรวม
ส่วนขยายนี้ช่วยให้แอปพลิเคชันทำการเรย์แคสต์กับสิ่งที่ติดตามได้ในสภาพแวดล้อม เรย์แคสต์มีประโยชน์ในการตรวจจับวัตถุในสภาพแวดล้อมที่เรย์จะตัดกัน เช่น
- วิธีระบุตําแหน่งที่วัตถุที่ลอยอยู่จะตกลงเมื่อปล่อยโดยใช้การแรย์แคสต์แนวตั้ง
- เพื่อระบุจุดที่ผู้ใช้กําลังมองอยู่โดยใช้เรย์แคสต์ที่หันไปข้างหน้า
ค้นหาความสามารถของ Raycast ที่รองรับ
ฟังก์ชัน xrEnumerateRaycastSupportedTrackableTypesANDROID มีคำจำกัดความดังนี้
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
คําอธิบายพารามิเตอร์
instanceคือ XrInstance ที่ดึงข้อมูลsystemIdออกมาsystemIdคือXrSystemIdที่กำลังแสดงรายการประเภทที่ติดตามได้ซึ่งรองรับการแรย์แคสต์trackableTypeCapacityInputคือความจุของtrackableTypesหรือ 0 เพื่อดึงข้อมูลความจุที่จําเป็นtrackableTypeCountOutputคือพอยน์เตอร์ไปยังจํานวนอาร์เรย์ หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่trackableTypeCapacityInputไม่เพียงพอtrackableTypesเป็นพอยน์เตอร์ไปยังอาร์เรย์ XrTrackableTypeANDROID แต่สามารถเป็นNULLได้หากtrackableTypeCapacityInputเป็น0
- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
trackableTypesขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
xrEnumerateRaycastSupportedTrackableTypesANDROID จะแสดงรายการประเภทที่ติดตามได้ซึ่งรองรับการแรย์แคสต์ตามเซสชันปัจจุบัน
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_raycastก่อนเรียกใช้ xrEnumerateRaycastSupportedTrackableTypesANDROID instanceต้องเป็นตัวแฮนเดิล XrInstance ที่ถูกต้องtrackableTypeCountOutputต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t- หาก
trackableTypeCapacityInputไม่ใช่0trackableTypesต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าtrackableTypeCapacityInputXrTrackableTypeANDROID
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
ทำการแรย์แคสต์
ฟังก์ชัน xrRaycastANDROID มีคำจำกัดความดังนี้
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
คําอธิบายพารามิเตอร์
sessionคือ XrSession ที่ใช้เรย์แคสต์rayInfoคือ XrRaycastInfoANDROID ที่อธิบายเรย์ที่จะแคสต์resultsเป็นพอยน์เตอร์ไปยัง XrRaycastHitResultsANDROID ที่ได้รับผลลัพธ์ของการแรย์แคสต์
แอปพลิเคชันสามารถทำการเรย์แคสต์ได้โดยเรียกใช้ xrRaycastANDROID
- หากเรย์แคสต์ตัดกับวัตถุที่ติดตามได้มากกว่า XrRaycastHitResultsANDROID::maxResults รันไทม์ต้องแสดงผลลัพธ์การตีที่ใกล้กับ XrRaycastHitResultsANDROID::origin ของเรย์มากที่สุด
- หากเรย์แคสต์ตัดกับสิ่งที่ติดตามได้ประเภท
XR_TRACKABLE_TYPE_ANDROID_PLANEซึ่งอยู่ภายใต้ระนาบอื่น รันไทม์ต้องแสดงผลลัพธ์การตีกลับสำหรับระนาบที่ครอบคลุมเท่านั้น - รันไทม์ต้องแสดงผลลัพธ์ Hit ตามลําดับจากใกล้ที่สุดไปจนถึงไกลที่สุดจาก XrRaycastInfoANDROID::origin ตามเวกเตอร์ XrRaycastInfoANDROID::trajectory
- รันไทม์ต้องแสดงผล
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDหากไม่มีการจัดเรียงประเภทที่ติดตามได้ซึ่งสอดคล้องกับตัวแฮนเดิล XrTrackableTrackerANDROID ใน XrRaycastInfoANDROID::trackers โดย xrEnumerateRaycastSupportedTrackableTypesANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_raycastก่อนเรียกใช้ xrRaycastANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องrayInfoต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrRaycastInfoANDROID ที่ถูกต้องresultsต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrRaycastHitResultsANDROID
รหัสการคืนสินค้า
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 มีคำจำกัดความดังนี้
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;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้maxResultsคือจำนวนผลลัพธ์สูงสุดuint32_tรายการที่จะแสดงtrackerCountคือจํานวนuint32_tของอาร์เรย์trackerstrackersคืออาร์เรย์ XrTrackableTrackerANDROID ที่ควรทดสอบกับเรย์แคสต์originคือ XrVector3f ที่ปล่อยรังสีtrajectoryคือ XrVector3f ที่กําหนดเป้าหมายเป็นรังสีspaceคือ XrSpace ที่ปล่อยรังสีtimeคือXrTimeที่ปล่อยรังสี
โครงสร้าง XrRaycastInfoANDROID จะอธิบายเรย์ที่จะแคสต์
- อาร์เรย์ XrRaycastInfoANDROID::trackers อาจมีอุปกรณ์ติดตามประเภทต่างๆ
- อาร์เรย์ XrRaycastInfoANDROID::trackers ต้องไม่มีเครื่องมือติดตามหลายรายการประเภทเดียวกัน มิฉะนั้นรันไทม์ต้องแสดง
XR_ERROR_VALIDATION_FAILURE
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_raycastก่อนใช้ XrRaycastInfoANDROID typeต้องเป็นXR_TYPE_RAYCAST_INFO_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างtrackersต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของตัวแฮนเดิลtrackerCountXrTrackableTrackerANDROID ที่ถูกต้องspaceต้องเป็นแฮนเดิล XrSpace ที่ถูกต้อง- พารามิเตอร์
trackerCountต้องมากกว่า0 - ทั้ง
spaceและองค์ประกอบของtrackersต้องสร้างขึ้น กำหนด หรือดึงมาจาก XrSession เดียวกัน
โครงสร้าง XrRaycastHitResultsANDROID มีคำจำกัดความดังนี้
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้resultsCapacityInputคือความจุของอาร์เรย์resultsหรือ 0 เพื่อบ่งบอกคําขอดึงข้อมูลความจุที่จําเป็นresultsCountOutputคือพอยน์เตอร์ไปยังจํานวนresultsที่เขียน หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่resultsCapacityInputไม่เพียงพอresultsคือตัวชี้ไปยังอาร์เรย์ของโครงสร้าง XrRaycastHitResultANDROID สามารถเป็นNULLได้หากresultsCapacityInputเป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
resultsขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
XrRaycastHitResultsANDROID มีอาร์เรย์ของ Hit ของ Raycast
รันไทม์ต้องตั้งค่า resultsCountOutput ให้น้อยกว่าหรือเท่ากับ XrRaycastInfoANDROID::maxResults
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_raycastก่อนใช้ XrRaycastHitResultsANDROID typeต้องเป็นXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างresultsต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้างresultsCapacityInputXrRaycastHitResultANDROID- พารามิเตอร์
resultsCapacityInputต้องมากกว่า0
โครงสร้าง XrRaycastHitResultANDROID ได้รับการกําหนดดังนี้
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
คำอธิบายสมาชิก
typeคือ XrTrackableTypeANDROID ของสิ่งที่ติดตามได้ซึ่งเรย์แคสต์ตีtrackableคือXrTrackableANDROIDที่ Raycast ตี หรือXR_NULL_TRACKABLE_ANDROIDหากtypeที่ติดตามได้คือXR_TRACKABLE_TYPE_DEPTH_ANDROIDposeคือ XrPosef ที่ Raycast ตี
XrRaycastHitResultANDROID มีรายละเอียดของการตีกลับด้วย Raycast
XrRaycastHitResultANDROID::pose สำหรับการชนกับเครื่องบินต้องเป็นค่าที่ X และ Z คู่ขนานกับเครื่องบิน และแกน Y ตั้งฉากกับเครื่องบิน
ประเภท Hit ที่ติดตามได้ |
คำอธิบาย |
|
กระทบพื้นผิวแนวนอนและ/หรือแนวตั้งเพื่อระบุความลึกและการวางแนวที่ถูกต้องของจุด |
|
ใช้ข้อมูลความลึกจากทั้งฉากเพื่อกำหนดความลึกและการวางแนวที่ถูกต้องของจุด |
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_raycastก่อนใช้ XrRaycastHitResultANDROID typeต้องเป็นค่า XrTrackableTypeANDROID ที่ถูกต้อง
ตัวอย่างโค้ดสำหรับเรย์แคสติ้ง
โค้ดตัวอย่างต่อไปนี้แสดงวิธีทำการแรย์แคสต์
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]
}
ค่าคงที่ Enum ใหม่
เพิ่มรายการต่อไปนี้ในอนุกรม XrStructureType
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
โครงสร้างใหม่
ฟังก์ชันใหม่
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไข 1, 2024-10-02 (Kenny Vercaemer)
- คำอธิบายส่วนขยายเริ่มต้น
OpenXR™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร