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ố
instance
là XrInstance mà từ đósystemId
được truy xuất.systemId
làXrSystemId
có 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ê.trackableTypeCapacityInput
là dung lượng củatrackableTypes
hoặc 0 để truy xuất dung lượng bắt buộc.trackableTypeCountOutput
là con trỏ đến số lượng mảng hoặc con trỏ đến dung lượng bắt buộc trong trường hợptrackableTypeCapacityInput
không đủ.trackableTypes
là con trỏ đến một mảng XrTrackableTypeANDROID, nhưng có thể làNULL
nếutrackableTypeCapacityInput
là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ề cách truy xuất kích thước
trackableTypes
bắ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_raycast
trước khi gọi xrEnumerateRaycastSupportedTrackableTypesANDROID instance
phải là một tay cầm XrInstance hợp lệtrackableTypeCountOutput
phải là con trỏ đến giá trịuint32_t
- Nếu
trackableTypeCapacityInput
không phải là0
, thìtrackableTypes
phải là con trỏ đến một mảng các giá trịtrackableTypeCapacityInput
XrTrackableTypeANDROID
Mã trả về
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
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ố
session
là XrSession thực hiện raycast.rayInfo
là XrRaycastInfoANDROID mô tả tia sáng cần chiếu.results
là 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_ANDROID
nế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_raycast
trước khi gọi xrRaycastANDROID session
phải là một tay cầm XrSession hợp lệrayInfo
phải là con trỏ đến cấu trúc XrRaycastInfoANDROID hợp lệresults
phải là con trỏ trỏ đến cấu trúc XrRaycastHitResultsANDROID
Mã trả về
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
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
type
là XrStructureType của cấu trúc này.next
làNULL
hoặ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.maxResults
là số lượng kết quả tối đauint32_t
cần trả về.trackerCount
là sốuint32_t
của mảngtrackers
.trackers
là mảng XrTrackableTrackerANDROID mà tia được truyền nên được kiểm thử.origin
là XrVector3f mà tia sáng được chiếu từ đó.trajectory
là XrVector3f mà tia sáng nhắm đến.space
là XrSpace mà tia sáng được chiếu vào.time
làXrTime
mà tia sáng được chiếu vào.
Cấu trúc XrRaycastInfoANDROID mô tả tia sáng cần 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_raycast
trước khi sử dụng XrRaycastInfoANDROID type
phải làXR_TYPE_RAYCAST_INFO_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúctrackers
phải là con trỏ đến một mảng các tay cầm XrTrackableTrackerANDROIDtrackerCount
hợp lệspace
phải là một tên người dùng XrSpace hợp lệ- Tham số
trackerCount
phải lớn hơn0
- Cả
space
và các phần tử củatrackers
phả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
type
là XrStructureType của cấu trúc này.next
làNULL
hoặ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.resultsCapacityInput
là dung lượng của mảngresults
hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.resultsCountOutput
là con trỏ đến số lượngresults
đã ghi hoặc con trỏ đến dung lượng cần thiết trong trường hợpresultsCapacityInput
không đủ.results
là con trỏ trỏ đến một mảng các cấu trúc XrRaycastHitResultANDROID. Giá trị này có thể làNULL
nếuresultsCapacityInput
là 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ề cách truy xuất kích thước
results
bắt buộc.
XrRaycastHitResultsANDROID chứa mảng các lần nhấn của một raycast.
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_raycast
trước khi sử dụng XrRaycastHitResultsANDROID type
phải làXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúcresults
phải là con trỏ đến một mảng các cấu trúcresultsCapacityInput
dựa trên XrRaycastHitResultANDROID- Tham số
resultsCapacityInput
phả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
type
là XrTrackableTypeANDROID của đối tượng có thể theo dõi mà tia sáng trúng.trackable
làXrTrackableANDROID
mà tia sáng đã chạm vào hoặcXR_NULL_TRACKABLE_ANDROID
nếutype
có thể theo dõi làXR_TRACKABLE_TYPE_DEPTH_ANDROID
.pose
là XrPosef mà raycast đã đánh trúng.
XrRaycastHitResultANDROID chứa thông tin chi tiết về một lần đánh trúng 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_raycast
trước khi sử dụng XrRaycastHitResultANDROID type
phả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_ANDROID
XR_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