สตริงชื่อ
XR_ANDROID_depth_texture
ประเภทชิ้นงาน
การขยายอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
703
การแก้ไข
1
การพึ่งพาส่วนขยายและเวอร์ชัน
วันที่แก้ไขล่าสุด
2024-09-11
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
ผู้เขียน
Sushant Kulkarni จาก Google
Cairn Overturf จาก Google
Spencer Quin จาก Google
Levana Chen จาก Google
ภาพรวม
ส่วนขยายนี้ช่วยให้แอปพลิเคชันขอแผนที่ความลึกของสภาพแวดล้อมรอบๆ ชุดหูฟังในโลกแห่งความเป็นจริง และค้นหาความละเอียดความลึกที่รองรับเมื่อสร้าง
ส่วนขยายนี้มีไว้เพื่อแสดงข้อมูลเชิงลึกแบบดิบและแบบเรียบสำหรับส่วนที่บดบัง การทดสอบการชน และงานอื่นๆ ที่เจาะจงซึ่งใช้ประโยชน์จากเรขาคณิตของฉากที่แม่นยำ เช่น การตรวจจับใบหน้าปลอม
ตรวจสอบความสามารถของระบบ
โครงสร้าง XrSystemDepthTrackingPropertiesANDROID มีคำจำกัดความดังนี้
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
const void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้supportsDepthTrackingคือXrBool32ซึ่งระบุว่าระบบปัจจุบันรองรับการติดตามแบบใช้ระยะชัดลึกหรือไม่
แอปพลิเคชันสามารถตรวจสอบว่าระบบสามารถติดตามแบบใช้ข้อมูลเชิงลึกหรือไม่โดยขยายโครงสร้าง XrSystemProperties ด้วยโครงสร้าง XrSystemDepthTrackingPropertiesANDROID เมื่อเรียกใช้ xrGetSystemProperties
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrSystemDepthTrackingPropertiesANDROID typeต้องเป็นXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
การแก้ไขความลึกของคำค้นหา
ฟังก์ชัน xrEnumerateDepthResolutionsANDROID มีคำจำกัดความดังนี้
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
คําอธิบายพารามิเตอร์
sessionคือ XrSession ที่แสดงรายการความละเอียดของภาพระดับความลึกที่รองรับresolutionCapacityInputคือความจุของresolutionsหรือ 0 เพื่อดึงข้อมูลความจุที่จําเป็นresolutionCountOutputคือพอยน์เตอร์ไปยังจํานวนuint64_tresolutionsที่เขียน หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่resolutionCapacityInputไม่เพียงพอresolutionsเป็นพอยน์เตอร์ไปยังอาร์เรย์ของ XrDepthCameraResolutionANDROID แต่สามารถเป็นNULLได้หากresolutionCapacityInputเป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
resolutionsขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
xrEnumerateDepthResolutionsANDROID จะแสดงความละเอียดของภาพแบบ 3 มิติที่เซสชันปัจจุบันรองรับ ความละเอียดของภาพ 3 มิติควรเรียงตามลำดับจากค่ากำหนดรันไทม์ที่สูงที่สุดไปจนถึงต่ำที่สุด แอปพลิเคชันควรใช้ค่ากําหนดสูงสุดที่รองรับเพื่อให้ได้ประสิทธิภาพและคุณภาพที่ดีที่สุด
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนเรียกใช้ xrEnumerateDepthResolutionsANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องresolutionCountOutputต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t- หาก
resolutionCapacityInputไม่ใช่ 0resolutionsต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าresolutionCapacityInputXrDepthCameraResolutionANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENT
อาร์เรย์ XrDepthCameraResolutionANDROID อธิบายความละเอียดของภาพความลึกที่รองรับเมื่อสร้าง XrDepthSwapchainANDROID
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2
} XrDepthCameraResolutionANDROID;
คำอธิบายรายการ
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID— ความละเอียดของรูปภาพความลึกและความเชื่อมั่นคือ 80x80XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— ความละเอียดของรูปภาพความลึกและรูปภาพความเชื่อมั่นคือ 160x160XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— ความละเอียดของรูปภาพความลึกและความเชื่อมั่นคือ 320x320
สร้างเชนการแลกเปลี่ยนข้อมูลเชิงลึก
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID คือแฮนเดิลสับเปลี่ยนเชนเชิงลึก
ฟังก์ชัน xrCreateDepthSwapchainANDROID มีคำจำกัดความดังนี้
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
คําอธิบายพารามิเตอร์
sessionคือ XrSession ที่สร้าง Swapchain ของภาพระดับความลึกcreateInfoเป็นพอยน์เตอร์ไปยังโครงสร้าง XrDepthSwapchainCreateInfoANDROID ที่มีพารามิเตอร์ที่จะใช้สร้าง Swapchainswapchainคือพอยน์เตอร์ไปยังแฮนเดิลที่แสดงผล XrDepthSwapchainANDROID ที่สร้างขึ้น
แอปพลิเคชันสามารถใช้ฟังก์ชัน xrCreateDepthSwapchainANDROID เพื่อสร้าง Swapchain ของภาพความลึกซึ่งจัดการทั้งภาพความลึกและภาพความเชื่อมั่น
ระบบอาจใช้แฮนเดิล Swapchain ของภาพระดับความลึกที่แสดงผลในการเรียก API ในภายหลัง ต้องปลดปล่อยตัวแฮนเดิล XrDepthSwapchainANDROID ในที่สุดโดยใช้ฟังก์ชัน xrDestroyDepthSwapchainANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนเรียกใช้ xrCreateDepthSwapchainANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องcreateInfoต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrDepthSwapchainCreateInfoANDROID ที่ถูกต้องswapchainต้องเป็นพอยน์เตอร์ไปยังตัวแฮนเดิล XrDepthSwapchainANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_HANDLE_INVALIDXR_ERROR_LIMIT_REACHED
โครงสร้าง XrDepthSwapchainCreateInfoANDROID มีคำจำกัดความดังนี้
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้resolutionคือ XrDepthCameraResolutionANDROID ที่ควรสร้างพื้นผิวความลึกและความเชื่อมั่นcreateFlagsคือ XrDepthSwapchainCreateFlagsANDROID อย่างน้อย 1 รายการ
โครงสร้าง XrDepthSwapchainCreateInfoANDROID มีตัวเลือกการสร้างสำหรับ XrDepthSwapchainANDROID เมื่อส่งไปยัง xrCreateDepthSwapchainANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrDepthSwapchainCreateInfoANDROID typeต้องเป็นXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างresolutionต้องเป็นค่า XrDepthCameraResolutionANDROID ที่ถูกต้องcreateFlagsต้องเป็นชุดค่าผสมที่ถูกต้องของค่า XrDepthSwapchainCreateFlagBitsANDROIDcreateFlagsต้องไม่เท่ากับ 0
XrDepthSwapchainCreateFlagsANDROID จะระบุตัวเลือกการสร้างสำหรับ XrDepthSwapchainANDROID
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
บิตที่ถูกต้องสำหรับ XrDepthSwapchainCreateFlagsANDROID กำหนดโดย XrDepthSwapchainCreateFlagBitsANDROID ซึ่งระบุไว้ดังนี้
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
ฟังก์ชัน xrDestroyDepthSwapchainANDROID มีคำจำกัดความดังนี้
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
คําอธิบายพารามิเตอร์
swapchainเป็นตัวแฮนเดิล XrDepthSwapchainANDROID ที่xrCreateDepthSwapchainANDROIDสร้างขึ้นก่อนหน้านี้
ฟังก์ชัน xrDestroyDepthSwapchainANDROID จะทำลาย DepthSwapchain
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนเรียกใช้ xrDestroyDepthSwapchainANDROID swapchainต้องเป็นแฮนเดิล XrDepthSwapchainANDROID ที่ถูกต้อง
ความปลอดภัยของชุดข้อความ
- การเข้าถึง
swapchainและตัวแฮนเดิลย่อยต้องได้รับการซิงค์จากภายนอก
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
เข้าถึงพื้นผิวความลึก
ฟังก์ชัน xrEnumerateDepthSwapchainImagesANDROID มีคำจำกัดความดังนี้
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
คําอธิบายพารามิเตอร์
depthSwapchainคือ XrDepthSwapchainANDROID ที่จะรับรูปภาพdepthImageCapacityInputคือความจุของอาร์เรย์depthImagesหรือ 0 เพื่อบ่งบอกคําขอดึงข้อมูลความจุที่จําเป็นdepthImageCountOutputคือพอยน์เตอร์ไปยังจํานวนdepthImagesที่เขียน หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่depthImageCapacityInputไม่เพียงพอdepthImagesเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้าง XrDepthSwapchainImageANDROID สามารถเป็นNULLได้หากdepthImageCapacityInputเป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
depthImagesขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
xrEnumerateDepthSwapchainImagesANDROID จะเติมอาร์เรย์ของโครงสร้าง XrDepthSwapchainImageANDROID ทรัพยากรจะคงที่และใช้งานได้ตลอดอายุของ XrDepthSwapchainANDROID ฟังก์ชันนี้ทํางานคล้ายกับ xrEnumerateSwapchainImages
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนเรียกใช้ xrEnumerateDepthSwapchainImagesANDROID depthSwapchainต้องเป็นตัวแฮนเดิล XrDepthSwapchainANDROID ที่ถูกต้องdepthImageCountOutputต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t- หาก
depthImageCapacityInputไม่ใช่ 0depthImagesต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้างdepthImageCapacityInputXrDepthSwapchainImageANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENT
โครงสร้าง XrDepthSwapchainImageANDROID มีคำจำกัดความดังนี้
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้rawDepthImageคือNULLหรือเคอร์เซอร์ไปยังรูปภาพความลึกแบบ RAW สำหรับทั้งมุมมองซ้ายและขวา ค่ามีหน่วยเป็นเมตร ค่าพิเศษ:0.0บ่งชี้ว่าพิกเซลความลึกไม่ถูกต้องหรือว่างเปล่าในความลึกดิบInfบ่งชี้ว่าความลึกที่ทราบอยู่ไกลออกไปอย่างไม่มีที่สิ้นสุดrawDepthConfidenceImageคือNULLหรือเคอร์เซอร์ไปยังภาพความเชื่อมั่นเกี่ยวกับความลึกแบบ RAW สำหรับทั้งมุมมองซ้ายและขวาsmoothDepthImageคือNULLหรือเคอร์เซอร์สำหรับปรับภาพความลึกให้เรียบเนียนสำหรับทั้งมุมมองซ้ายและขวา ค่ามีหน่วยเป็นเมตร ค่าพิเศษ:0.0ระบุพิกเซลความลึกที่ไม่ถูกต้องหรือว่างเปล่าในความลึกแบบเรียบInfระบุความลึกที่ทราบซึ่งอยู่ไกลมากsmoothDepthConfidenceImageคือNULLหรือเคอร์เซอร์เพื่อปรับความลึกของภาพอย่างราบรื่นทั้งสำหรับมุมมองซ้ายและขวา
XrDepthSwapchainImageANDROID แสดงภาพความลึกจาก XrDepthSwapchainANDROID ที่อ่านได้ ซึ่งจัดสรรตามที่อธิบายไว้ใน XrDepthSwapchainCreateInfoANDROID::resolution และ XrDepthSwapchainCreateInfoANDROID::createFlags ขณะเรียกใช้ xrCreateDepthSwapchainANDROID สำหรับภาพความลึกแต่ละภาพ ให้ทำดังนี้
- ค่ารูปภาพจะวางไว้ในหน่วยความจำตามลําดับแถว โดยไม่มีการเว้นวรรคระหว่างแถว
- ค่าแรกคือด้านซ้ายบน และค่าสุดท้ายคือด้านขวาล่าง
- ขนาดของหน่วยความจําที่ชี้ไปจะกําหนดโดยค่าของ xrEnumerateDepthSwapchainImagesANDROID และตั้งค่าโดย XrDepthSwapchainCreateInfoANDROID::resolution ขณะเรียกใช้ xrCreateDepthSwapchainANDROID ตัวอย่างเช่น หาก
resolutionมีค่าเป็นXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROIDรูปภาพความลึกจะมีขนาด2*160*160*sizeof(float) - ค่าของ
rawDepthImageต้องเป็นNULLหากไม่ได้ตั้งค่า XrDepthSwapchainCreateInfoANDROID::createFlagsXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID - ค่าของ
rawDepthConfidenceImageต้องเป็นNULLหากไม่ได้ตั้งค่า XrDepthSwapchainCreateInfoANDROID::createFlagsXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID - ค่าของ
smoothDepthImageต้องเป็นNULLหากไม่ได้ตั้งค่า XrDepthSwapchainCreateInfoANDROID::createFlagsXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID - ค่าของ
smoothDepthConfidenceImageต้องเป็นNULLหากไม่ได้ตั้งค่า XrDepthSwapchainCreateInfoANDROID::createFlagsXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrDepthSwapchainImageANDROID typeต้องเป็นXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
ฟังก์ชัน xrAcquireDepthSwapchainImagesANDROID มีคำจำกัดความดังนี้
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
คําอธิบายพารามิเตอร์
depthSwapchainคือแฮนเดิล XrDepthSwapchainANDROID สำหรับภาพความลึกacquireInfoคือ XrDepthAcquireInfoANDROID ที่มีข้อมูลเกี่ยวกับวิธีรับภาพความลึกacquireResultคือ XrDepthAcquireResultANDROID ที่แสดงผลซึ่งมีข้อมูลเกี่ยวกับรูปภาพความลึกที่ได้มา
แอปพลิเคชันสามารถใช้ฟังก์ชัน xrAcquireDepthSwapchainImagesANDROID เพื่อรับดัชนีรูปภาพ Swapchain ล่าสุดที่ใช้ได้ เช่น XrDepthAcquireResultANDROID::acquiredIndex ลงในอาร์เรย์ XrDepthSwapchainImageANDROID ที่ระบุโดย xrEnumerateDepthSwapchainImagesANDROID XrDepthAcquireResultANDROID ที่แสดงผลยังมีข้อมูลอื่นๆ ด้วย เช่น มุมมองและท่าทางที่จำเป็นในการตีความข้อมูลความลึก คุณสามารถอ่านจากช่องที่ได้มาในแอตทริบิวต์รูปภาพได้จนกว่าจะเรียกใช้ xrAcquireDepthSwapchainImagesANDROID ครั้งถัดไป
ต้องมีการเรียกใช้ xrAcquireDepthSwapchainImagesANDROID ไม่เกิน 1 ครั้งระหว่างการเรียกใช้ xrBeginFrame และ xrEndFrame ที่สอดคล้องกันคู่ใดคู่หนึ่งในเซสชัน
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนเรียกใช้ xrAcquireDepthSwapchainImagesANDROID depthSwapchainต้องเป็นตัวแฮนเดิล XrDepthSwapchainANDROID ที่ถูกต้องacquireInfoต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrDepthAcquireInfoANDROID ที่ถูกต้องacquireResultต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrDepthAcquireResultANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_CALL_ORDER_INVALIDXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALID
โครงสร้าง XrDepthAcquireInfoANDROID มีคำจำกัดความดังนี้
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้spaceคือ XrSpace ที่กําหนดเฟรมอ้างอิงของการโพสท่าที่แสดงผลใน XrDepthAcquireResultANDROID::viewsdisplayTimeคือXrTimeที่ระบุเวลาที่ใช้ในการประมวลผลท่าทางสำหรับท่าทางที่แสดงผลใน XrDepthAcquireResultANDROID::views แอปพลิเคชันควรแสดงนานกว่าเวลาแสดงผลที่คาดการณ์ไว้สำหรับเฟรมปัจจุบัน
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrDepthAcquireInfoANDROID typeต้องเป็นXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างspaceต้องเป็นแฮนเดิล XrSpace ที่ถูกต้อง
โครงสร้าง XrDepthAcquireResultANDROID มีคำจำกัดความดังนี้
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้acquiredIndexคือดัชนีของพื้นผิวที่รับไว้ในอาร์เรย์ XrDepthSwapchainImageANDROID ที่ระบุโดย xrEnumerateDepthSwapchainImagesANDROIDexposureTimestampคือXrTimeที่ระบุเวลาที่บันทึกแผนที่ความลึกviewsคืออาร์เรย์ของ XrDepthViewANDROID 2 รายการ โดย 1 รายการสำหรับตาแต่ละข้าง โดยที่ดัชนี 0 คือตาซ้ายและดัชนี 1 คือตาขวา
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrDepthAcquireResultANDROID typeต้องเป็นXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง- องค์ประกอบใดๆ ของ
viewsต้องเป็นโครงสร้าง XrDepthViewANDROID ที่ถูกต้อง
โครงสร้าง XrDepthViewANDROID มีคำจำกัดความดังนี้
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้fovคือ XrFovf ที่ระบุมุมมองที่ใช้ในการสร้างมุมมองนี้ มุมมองจะไม่พลิกในแนวนอนหรือแนวตั้งposeคือ XrPosef ที่ระบุท่าทางที่ใช้ในการเรนเดอร์แผนที่ความลึก เฟรมอ้างอิงจะระบุไว้ใน XrDepthAcquireInfoANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_textureก่อนใช้ XrDepthViewANDROID typeต้องเป็นXR_TYPE_DEPTH_VIEW_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
ตัวอย่างโค้ดสำหรับการติดตามแบบใช้ระยะชัดลึก
โค้ดตัวอย่างต่อไปนี้แสดงวิธีรับภาพความลึก
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code in this section shows how to find the stageSpace position
// of the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquireIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = // value in [0, imageResolution)
int imageX = // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value would be obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanB + (tanU - tanB)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
ประเภทออบเจ็กต์ใหม่
ค่าคงที่ Enum ใหม่
เพิ่มรายการต่อไปนี้ในคําจํากัดความของ XrObjectType
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
การแจกแจงค่า XrResult ขยายให้มีรายการต่อไปนี้
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
เพิ่มรายการต่อไปนี้ในอนุกรม XrStructureType
XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
Enumeration ใหม่
โครงสร้างใหม่
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
ฟังก์ชันใหม่
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไข 1, 09-09-2024 (Levana Chen)
- คำอธิบายส่วนขยายเริ่มต้น
OpenXR™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร