สตริงชื่อ
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_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
การแก้ไขความลึกของคำค้นหา
ฟังก์ชัน xrEnumerateDepthResolutionsANDROID มีคำจำกัดความดังนี้
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
คําอธิบายพารามิเตอร์
session
คือ XrSession ที่แสดงรายการความละเอียดของภาพระดับความลึกที่รองรับresolutionCapacityInput
คือความจุของresolutions
หรือ 0 เพื่อดึงข้อมูลความจุที่จําเป็นresolutionCountOutput
คือพอยน์เตอร์ไปยังจํานวนuint64_t
resolutions
ที่เขียน หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่resolutionCapacityInput
ไม่เพียงพอresolutions
เป็นพอยน์เตอร์ไปยังอาร์เรย์ของ XrDepthCameraResolutionANDROID แต่สามารถเป็นNULL
ได้หากresolutionCapacityInput
เป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
resolutions
ขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
xrEnumerateDepthResolutionsANDROID จะแสดงความละเอียดของภาพแบบ 3 มิติที่เซสชันปัจจุบันรองรับ ความละเอียดของภาพ 3 มิติควรเรียงตามลำดับจากค่ากำหนดรันไทม์ที่สูงที่สุดไปจนถึงต่ำที่สุด แอปพลิเคชันควรใช้ค่ากําหนดสูงสุดที่รองรับเพื่อให้ได้ประสิทธิภาพและคุณภาพที่ดีที่สุด
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_depth_texture
ก่อนเรียกใช้ xrEnumerateDepthResolutionsANDROID session
ต้องเป็นแฮนเดิล XrSession ที่ถูกต้องresolutionCountOutput
ต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t
- หาก
resolutionCapacityInput
ไม่ใช่ 0resolutions
ต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าresolutionCapacityInput
XrDepthCameraResolutionANDROID
รหัสการคืนสินค้า
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_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
สร้าง Swapchain สำหรับความลึก
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID คือแฮนเดิลสำหรับ Swapchain ของภาพ 3 มิติ
ฟังก์ชัน 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_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_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_ANDROID
next
ต้องเป็น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_UNSUPPORTED
XR_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
ต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้างdepthImageCapacityInput
XrDepthSwapchainImageANDROID
รหัสการคืนสินค้า
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_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_ANDROID
next
ต้องเป็น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_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_DEPTH_NOT_AVAILABLE_ANDROID
XR_ERROR_CALL_ORDER_INVALID
XR_ERROR_LIMIT_REACHED
XR_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_ANDROID
next
ต้องเป็น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_ANDROID
next
ต้องเป็น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_ANDROID
next
ต้องเป็น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,
.time = 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_ANDROID
XR_TYPE_DEPTH_VIEW_ANDROID
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
Enumeration ใหม่
โครงสร้างใหม่
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
ฟังก์ชันใหม่
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไข 1, 09-09-2024 (Levana Chen)
- คำอธิบายส่วนขยายเริ่มต้น