สตริงชื่อ
XR_ANDROID_trackables_object
ประเภทชิ้นงาน
การขยายอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
467
การแก้ไข
1
การพึ่งพาส่วนขยายและเวอร์ชัน
วันที่แก้ไขล่าสุด
2024-11-01
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
ผู้เขียน
Diego Tipaldi จาก Google
David Joseph Tan จาก Google
Christopher Doer จาก Google
Spencer Quin จาก Google
Jared Finder จาก Google
Levana Chen จาก Google
Kenny Vercaemer จาก Google
ภาพรวม
ส่วนขยายนี้เปิดใช้การติดตามวัตถุจริง เช่น แป้นพิมพ์ เมาส์ และวัตถุอื่นๆ ในสภาพแวดล้อม
ติดตามวัตถุ
ส่วนขยายนี้จะเพิ่ม XR_TRACKABLE_TYPE_OBJECT_ANDROID
ลงใน XrTrackableTypeANDROID
แอปพลิเคชันอาจสร้าง XrTrackableTrackerANDROID
โดยการเรียกใช้
xrCreateTrackableTrackerANDROID
และระบุ
XR_TRACKABLE_TYPE_OBJECT_ANDROID
เป็นประเภทที่ติดตามได้ใน
XrTrackableTrackerCreateInfoANDROID::trackableType
เพื่อติดตามวัตถุ
โครงสร้าง XrTrackableObjectConfigurationANDROID
ได้รับการกําหนดดังนี้
typedef struct XrTrackableObjectConfigurationANDROID {
XrStructureType type;
void* next;
uint32_t labelCount;
const XrObjectLabelANDROID* activeLabels;
} XrTrackableObjectConfigurationANDROID;
คำอธิบายสมาชิก
type
คือXrStructureType
ของโครงสร้างนี้next
คือNULL
หรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้labelCount
คือจํานวนactiveLabels
activeLabels
คือพอยน์เตอร์ไปยังอาร์เรย์XRObjectLabelANDROID
ที่ระบุออบเจ็กต์ที่ใช้งานอยู่ในการติดตาม
แอปพลิเคชันอาจตั้งค่าเพิ่มเติมด้วยการเพิ่ม XrTrackableObjectConfigurationANDROID
ลงในเชน XrTrackableTrackerCreateInfoANDROID
ถัดไป ระบบจะกรองเอาต์พุตจาก xrGetAllTrackablesANDROID
ให้ตรงกับ activeLabels
หากแอปพลิเคชันไม่ได้ตั้งค่า XrTrackableObjectConfigurationANDROID
ระบบจะติดตามวัตถุทั้งหมดที่ระบุ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_trackables_object
ก่อนใช้XrTrackableObjectANDROID
type
ต้องเป็นXR_TYPE_TRACKABLE_OBJECT_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างactiveLabels
ต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าlabelCount
ที่ถูกต้องXrObjectLabelANDROID
- พารามิเตอร์
labelCount
ต้องมากกว่า0
นิพจน์ XrObjectLabelANDROID
เป็นป้ายกํากับสําหรับออบเจ็กต์ XrTrackableANDROID
typedef enum XrObjectLabelANDROID {
XR_OBJECT_LABEL_UNKNOWN_ANDROID = 0,
XR_OBJECT_LABEL_KEYBOARD_ANDROID = 1,
XR_OBJECT_LABEL_MOUSE_ANDROID = 2,
XR_OBJECT_LABEL_LAPTOP_ANDROID = 3,
XR_OBJECT_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrObjectLabelANDROID;
รับออบเจ็กต์ที่ติดตามได้
ฟังก์ชัน xrGetTrackableObjectANDROID
ได้รับการกําหนดดังนี้
XrResult xrGetTrackableObjectANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableObjectANDROID* objectOutput);
คําอธิบายพารามิเตอร์
tracker
คือXrTrackableTrackerANDROID
ที่จะค้นหาgetInfo
คือXrTrackableGetInfoANDROID
ที่มีข้อมูลที่ใช้เพื่อรับออบเจ็กต์ที่ติดตามได้objectOutput
คือพอยน์เตอร์ไปยังโครงสร้างXrTrackableObjectANDROID
ซึ่งจะแสดงผลออบเจ็กต์ที่ติดตามได้
ระบบจะแสดงผล XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
หากประเภทที่ติดตามได้ของ XrTrackableANDROID
ไม่ใช่ XR_TRACKABLE_TYPE_OBJECT_ANDROID
หรือหากประเภทที่ติดตามได้ของ XrTrackableTrackerANDROID
ไม่ใช่ XR_TRACKABLE_TYPE_OBJECT_ANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_trackables_object
ก่อนโทรหาxrGetTrackableObjectANDROID
tracker
ต้องเป็นแฮนเดิลXrTrackableTrackerANDROID
ที่ถูกต้องgetInfo
ต้องเป็นพอยน์เตอร์ไปยังโครงสร้างXrTrackableGetInfoANDROID
ที่ถูกต้องobjectOutput
ต้องเป็นพอยน์เตอร์ไปยังโครงสร้างXrTrackableObjectANDROID
รหัสการคืนสินค้า
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_SESSION_NOT_RUNNING
XR_ERROR_TIME_INVALID
XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
โครงสร้าง XrTrackableObjectANDROID
มีคำจำกัดความดังนี้
typedef struct XrTrackableObjectANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrPosef centerPose;
XrExtent3DfEXT extents;
XrObjectLabelANDROID objectLabel;
XrTime lastUpdatedTime;
} XrTrackableObjectANDROID;
คำอธิบายสมาชิก
type
คือXrStructureType
ของโครงสร้างนี้next
คือNULL
หรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้trackingState
คือXrTrackingStateANDROID
ของออบเจ็กต์centerPose
คือXrPosef
ของออบเจ็กต์ที่อยู่ในXrTrackableGetInfoANDROID::baseSpace
extents
คือมิติข้อมูลXrExtent3DfEXT
ของออบเจ็กต์objectLabel
คือXrObjectLabelANDROID
ที่รันไทม์กำหนดไว้สำหรับออบเจ็กต์นี้lastUpdatedTime
คือXrTime
ของการอัปเดตล่าสุดของออบเจ็กต์
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_trackables_object
ก่อนใช้XrTrackableObjectANDROID
type
ต้องเป็นXR_TYPE_TRACKABLE_OBJECT_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างtrackingState
ต้องเป็นค่าXrTrackingStateANDROID
ที่ถูกต้องobjectLabel
ต้องเป็นค่าXrObjectLabelANDROID
ที่ถูกต้อง
ตัวอย่างโค้ดสําหรับรับออบเจ็กต์ที่ติดตามได้
โค้ดตัวอย่างต่อไปนี้แสดงวิธีรับออบเจ็กต์ที่ติดตามได้
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrGetTrackableObjectANDROID xrGetTrackableObjectANDROID; // previously initialized
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // previously initialized
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrTrackableTrackerCreateInfoANDROID
createInfo{XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID};
createInfo.trackableType = XR_TRACKABLE_TYPE_OBJECT_ANDROID;
XrTrackableTrackerANDROID objectTrackableTracker;
XrResult result = xrCreateTrackableTrackerANDROID(
session,
&createInfo,
&objectTrackableTracker);
if (result != XR_SUCCESS) { /* Handle failures. */ }
uint32_t trackableCountOutput = 0;
std::vector<XrTrackableANDROID> allObjectTrackables;
// Query the number of trackables available.
result = xrGetAllTrackablesANDROID(
objectTrackableTracker,
0,
&trackableCountOutput,
nullptr
);
if (result == XR_SUCCESS) {
allObjectTrackables.resize(trackableCountOutput, XR_NULL_TRACKABLE_ANDROID);
// Fetch the actual trackable handles in the appropriately resized array.
result = xrGetAllTrackablesANDROID(
objectTrackableTracker,
trackableCountOutput,
&trackableCountOutput,
allObjectTrackables.data());
if (result == XR_SUCCESS) {
for (XrTrackableANDROID trackable : allObjectTrackables) {
// Object trackable query information
XrTrackableGetInfoANDROID objectGetInfo;
objectGetInfo.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID;
objectGetInfo.next = nullptr;
objectGetInfo.trackable = trackable;
objectGetInfo.baseSpace = appSpace;
objectGetInfo.time = updateTime;
// Get the object trackable. Note that the tracker only returns object types.
XrTrackableObjectANDROID object = { XR_TYPE_TRACKABLE_OBJECT_ANDROID };
result = xrGetTrackableObjectANDROID(
objectTrackableTracker,
&objectGetInfo,
&object
);
if (result == XR_SUCCESS) {
/** Do Stuff with the object */
}
}
}
}
// Release trackable tracker.
result = xrDestroyTrackableTrackerANDROID(objectTrackableTracker);
ค่าคงที่ Enum ใหม่
เพิ่มการแจกแจง XrStructureType
ดังนี้
XR_TYPE_TRACKABLE_OBJECT_ANDROID
XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID
การแจกแจงค่า XrTrackableTypeANDROID
ขยายให้มีรายการต่อไปนี้
XR_TRACKABLE_TYPE_OBJECT_ANDROID
Enum ใหม่
โครงสร้างใหม่
ฟังก์ชันใหม่
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไข 1, 2024-10-03 (Kenny Vercaemer)
- คำอธิบายส่วนขยายเริ่มต้น
OpenXR™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร