Chuỗi tên
XR_ANDROID_raycast
Loại phần mở rộng
Tiện ích thực thể
Số điện thoại mở rộng đã đăng ký
464
Bản sửa đổi
1
Phần mở rộng và phần phụ thuộc phiên bản
Ngày sửa đổi gần đây nhất
2024-10-02
Trạng thái IP
Không có thông báo xác nhận quyền sở hữu đối với tài sản trí tuệ nào.
Cộng tác viên
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Tổng quan
Tiện ích này cho phép ứng dụng thực hiện các phép chiếu tia đối với các đối tượng có thể theo dõi trong môi trường. Raycasts có thể hữu ích để phát hiện các đối tượng trong môi trường mà tia sáng sẽ giao nhau. Ví dụ:
- Để xác định vị trí một đối tượng nổi sẽ rơi khi bị thả, hãy sử dụng tính năng truyền tia dọc.
- Để xác định vị trí người dùng đang nhìn, hãy sử dụng tính năng truyền tia về phía trước.
Truy vấn các tính năng được hỗ trợ của raycast
Hàm xrEnumerateRaycastSupportedTrackableTypesANDROID được xác định như sau:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Nội dung mô tả tham số
instancelà XrInstance mà từ đósystemIdđược truy xuất.systemIdlàXrSystemIdcó các loại có thể theo dõi được hỗ trợ cho tính năng chiếu tia đang được liệt kê.trackableTypeCapacityInputlà dung lượng củatrackableTypeshoặc 0 để truy xuất dung lượng bắt buộc.trackableTypeCountOutputlà con trỏ đến số lượng mảng hoặc con trỏ đến dung lượng cần thiết trong trường hợptrackableTypeCapacityInputkhông đủ.trackableTypeslà con trỏ đến một mảng XrTrackableTypeANDROID, nhưng có thể làNULLnếutrackableTypeCapacityInputlà0.
- Hãy xem phần Tham số kích thước bộ đệm để biết nội dung mô tả chi tiết về việc truy xuất kích thước
trackableTypesbắt buộc.
xrEnumerateRaycastSupportedTrackableTypesANDROID liệt kê các loại có thể theo dõi hỗ trợ tính năng truyền tia theo phiên hiện tại.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_raycasttrước khi gọi xrEnumerateRaycastSupportedTrackableTypesANDROID instancephải là một tay cầm XrInstance hợp lệtrackableTypeCountOutputphải là con trỏ đến giá trịuint32_t- Nếu
trackableTypeCapacityInputkhông phải là0, thìtrackableTypesphải là con trỏ đến một mảng các giá trịtrackableTypeCapacityInputXrTrackableTypeANDROID
Mã trả về
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
Thực hiện raycast
Hàm xrRaycastANDROID được xác định là:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
Nội dung mô tả tham số
sessionlà XrSession thực hiện raycast.rayInfolà XrRaycastInfoANDROID mô tả tia sáng cần chiếu.resultslà con trỏ đến XrRaycastHitResultsANDROID nhận kết quả của raycast.
Ứng dụng có thể thực hiện các phép chiếu tia bằng cách gọi xrRaycastANDROID.
- Nếu một raycast giao nhau với nhiều đối tượng có thể theo dõi hơn XrRaycastHitResultsANDROID::maxResults, thì thời gian chạy phải trả về kết quả trúng gần nhất với XrRaycastHitResultsANDROID::origin của tia.
- Nếu một tia sáng giao nhau với một đối tượng có thể theo dõi thuộc loại
XR_TRACKABLE_TYPE_ANDROID_PLANE, được một mặt phẳng khác bao phủ, thì thời gian chạy phải chỉ trả về kết quả trúng cho mặt phẳng bao phủ. - Thời gian chạy phải trả về kết quả nhấn theo thứ tự từ gần nhất đến xa nhất từ XrRaycastInfoANDROID::origin dọc theo vectơ XrRaycastInfoANDROID::trajectory.
- Môi trường thời gian chạy phải trả về
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDnếu loại có thể theo dõi tương ứng với các tay cầm XrTrackableTrackerANDROID trong XrRaycastInfoANDROID::trackers không được liệt kê bằng xrEnumerateRaycastSupportedTrackableTypesANDROID.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_raycasttrước khi gọi xrRaycastANDROID sessionphải là một tay cầm XrSession hợp lệrayInfophải là con trỏ đến cấu trúc XrRaycastInfoANDROID hợp lệresultsphải là con trỏ trỏ đến cấu trúc XrRaycastHitResultsANDROID
Mã trả về
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
Cấu trúc XrRaycastInfoANDROID được xác định là:
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;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.maxResultslà số lượng kết quả tối đauint32_tcần trả về.trackerCountlà sốuint32_tcủa mảngtrackers.trackerslà mảng XrTrackableTrackerANDROID mà tia được truyền nên được kiểm thử.originlà XrVector3f mà tia sáng được chiếu từ đó.trajectorylà XrVector3f mà tia sáng nhắm đến.spacelà XrSpace mà tia sáng được chiếu vào.timelàXrTimemà tia sáng được chiếu vào.
Cấu trúc XrRaycastInfoANDROID mô tả tia sẽ chiếu.
- Mảng XrRaycastInfoANDROID::trackers có thể chứa các trình theo dõi thuộc nhiều loại.
- Mảng XrRaycastInfoANDROID::trackers phải không chứa nhiều trình theo dõi cùng loại, nếu không, thời gian chạy phải trả về
XR_ERROR_VALIDATION_FAILURE.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_raycasttrước khi sử dụng XrRaycastInfoANDROID typephải làXR_TYPE_RAYCAST_INFO_ANDROIDnextphải làNULLhoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúctrackersphải là con trỏ đến một mảng các tay cầm XrTrackableTrackerANDROIDtrackerCounthợp lệspacephải là một tên người dùng XrSpace hợp lệ- Tham số
trackerCountphải lớn hơn0 - Cả
spacevà các phần tử củatrackersphải được tạo, phân bổ hoặc truy xuất từ cùng một XrSession
Cấu trúc XrRaycastHitResultsANDROID được xác định là:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.resultsCapacityInputlà dung lượng của mảngresultshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.resultsCountOutputlà con trỏ đến số lượngresultsđã ghi hoặc con trỏ đến dung lượng cần thiết trong trường hợpresultsCapacityInputkhông đủ.resultslà con trỏ trỏ đến một mảng cấu trúc XrRaycastHitResultANDROID. Giá trị này có thể làNULLnếuresultsCapacityInputlà 0.- Hãy xem phần Tham số kích thước bộ nhớ đệm để biết nội dung mô tả chi tiết về việc truy xuất kích thước
resultsbắt buộc.
XrRaycastHitResultsANDROID chứa mảng các lần nhấn của một raycast.
Môi trường thời gian chạy phải đặt resultsCountOutput nhỏ hơn hoặc bằng
XrRaycastInfoANDROID::maxResults.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_raycasttrước khi sử dụng XrRaycastHitResultsANDROID typephải làXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextphải làNULLhoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúcresultsphải là con trỏ đến một mảng các cấu trúcresultsCapacityInputdựa trên XrRaycastHitResultANDROID- Tham số
resultsCapacityInputphải lớn hơn0
Cấu trúc XrRaycastHitResultANDROID được xác định là:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
Nội dung mô tả thành viên
typelà XrTrackableTypeANDROID của đối tượng có thể theo dõi mà tia sáng trúng.trackablelàXrTrackableANDROIDmà tia sáng đã chạm vào hoặcXR_NULL_TRACKABLE_ANDROIDnếutypecó thể theo dõi làXR_TRACKABLE_TYPE_DEPTH_ANDROID.poselà XrPosef mà raycast đã đánh trúng.
XrRaycastHitResultANDROID chứa thông tin chi tiết về một lần nhấn raycast.
XrRaycastHitResultANDROID::pose cho một lần nhấn vào mặt phẳng phải sao cho X và Z song song với mặt phẳng và trục Y vuông góc với mặt phẳng.
Loại lượt truy cập có thể theo dõi |
Nội dung mô tả |
|
Đánh vào các bề mặt ngang và/hoặc dọc để xác định độ sâu và hướng chính xác của một điểm. |
|
Sử dụng thông tin độ sâu từ toàn bộ cảnh để xác định độ sâu và hướng chính xác của một điểm. |
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_raycasttrước khi sử dụng XrRaycastHitResultANDROID typephải là một giá trị XrTrackableTypeANDROID hợp lệ
Mã ví dụ cho tính năng chiếu tia
Mã ví dụ sau đây minh hoạ cách thực hiện các phép chiếu tia.
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]
}
Hằng số enum mới
Bổ sung enum XrStructureType:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
Cấu trúc mới
Hàm mới
Vấn đề
Nhật ký phiên bản
- Bản sửa đổi 1, ngày 2 tháng 10 năm 2024 (Kenny Vercaemer)
- Nội dung mô tả ban đầu của tiện ích
OpenXR™ và biểu trưng OpenXR là các nhãn hiệu thuộc sở hữu của The Khronos Group Inc. và được đăng ký dưới dạng nhãn hiệu ở Trung Quốc, Liên minh Châu Âu, Nhật Bản và Vương quốc Anh.