XR_ANDROID_depth_texture
رشته نام
XR_ANDROID_depth_texture
نوع افزونه
افزونه نمونه
شماره داخلی ثبتشده
703
بازبینی
1
وضعیت تصویب
تصویبنشده
وابستگیهای افزونه و نسخه
تاریخ آخرین تغییر
2024-09-11
وضعیت IP
هیچ ادعای مالکیت فکری شناختهشدهای وجود ندارد.
همیاران
Sushant Kulkarni، Google
Cairn Overturf، Google
Spencer Quin، Google
Levana Chen، Google
نمای کلی
این افزونه به برنامه اجازه میدهد نقشههای عمق محیط واقعی اطراف هدست را درخواست کند و وضوحهای عمق پشتیبانیشده را در زمان ایجاد پرسوجو کند.
این افزونه برای نمایش عمق خام و هموار برای انسداد، آزمایشهای ضربه، و دیگر کارهای خاصی که از هندسه دقیق صحنه بهره میبرند (مثلاً تشخیص چهره جعلی) درنظر گرفته شده است.
توجه
نقشههای عمق توسط زمان اجرا تولید میشوند و بااستفاده از XrDepthSwapchainANDROID با برنامه همرسانی میشوند. زمان اجرا نباید وضوح تصویر عمق برگرداندهشده ازطریق xrEnumerateDepthResolutionsANDROID را درطول دوره عمر برنامه تغییر دهد.
اجازهها
این افزونه برای کاهش نگرانیهای مربوط به «اطلاعات شناساننده شخصی» (PII)، بافت عمق نمونهبرداریشده را نمایش میدهد. برنامههای Android باید اجازه android.permission.SCENE_UNDERSTANDING_FINE را در مانیفست خود فهرست کنند زیرا این افزونه هندسه محیط را آشکار میکند. اجازه android.permission.SCENE_UNDERSTANDING_FINE یک اجازه خطرناک محسوب میشود. برنامه باید برای استفاده از این عملکردها، در زمان اجرا درخواست اجازه کند:
(سطح محافظت: خطرناک)
بررسی قابلیت سیستم
ساختار XrSystemDepthTrackingPropertiesANDROID بهصورت زیر تعریف میشود:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. -
supportsDepthTrackingیکXrBool32است که نشان میدهد آیا سیستم فعلی از ردیابی عمق پشتیبانی میکند یا نه.
برنامه میتواند با گسترش دادن XrSystemProperties با ساختار XrSystemDepthTrackingPropertiesANDROID هنگام فراخوانی xrGetSystemProperties بررسی کند که آیا سیستم قادر به ردیابی عمق است یا نه.
اگر و فقط اگر زمان اجرا XR_FALSE را برای supportsDepthTracking برگرداند، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED را از xrCreateDepthSwapchainANDROID برگرداند.
استفاده معتبر (ضمنی)
- افزونه
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است، یا ۰ برای بازیابی ظرفیت موردنیاز. -
resolutionCountOutputاشارهگری به تعدادuint64_tresolutionsنوشتهشده است، یا اشارهگری به ظرفیت موردنیاز درصورتیکهresolutionCapacityInputکافی نباشد. -
resolutionsاشارهگری به آرایهای از XrDepthCameraResolutionANDROID است، اما میتواندNULLباشد اگرresolutionCapacityInput0باشد. - برای شرح مفصل بازیابی اندازه
resolutionsموردنیاز، بخش پارامترهای اندازه میانگیر را ببینید.
xrEnumerateDepthResolutionsANDROID وضوحهای عمقی را که جلسه فعلی پشتیبانی میکند برمیشمارد. وضوحهای عمق باید بهترتیب از بالاترین به پایینترین اولویت زمان اجرا باشد. برنامه باید از بالاترین اولویتی که برای عملکرد و کیفیت بهینه پشتیبانی میکند استفاده کند.
زمانهای اجرا باید همیشه محتوای میانگیر یکسانی را از این شمارش برای طول عمر جلسه برگردانند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید قبلاز فراخوانی xrEnumerateDepthResolutionsANDROID فعال شود -
sessionباید یک دسته XrSession معتبر باشد -
resolutionCountOutputباید اشارهگری به مقدارuint32_tباشد - اگر
resolutionCapacityInputبرابر با0نباشد،resolutionsباید اشارهگری به آرایهای از مقادیرresolutionCapacityInputXrDepthCameraResolutionANDROID باشد
کدهای برگشتی
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
XrDepthCameraResolutionANDROID enum وضوحهای عمق پشتیبانیشده را هنگام ایجاد 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,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
شرحهای شمارشی
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID— وضوح تصاویر عمق و اطمینان ۸۰×۸۰ است.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— وضوح تصاویر عمق و اطمینان ۱۶۰x۱۶۰ است.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— وضوح تصاویر عمق و اطمینان ۳۲۰×۳۲۰ است.
ایجاد زنجیره تعویض عمق
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID یک دسته زنجیره تعویض عمق است.
تابع xrCreateDepthSwapchainANDROID بهصورت زیر تعریف میشود:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
شرح پارامترها
-
sessionهمان XrSession است که زنجیره تعویض عمق را ایجاد میکند. -
createInfoاشارهگری به ساختار XrDepthSwapchainCreateInfoANDROID است که حاوی پارامترهایی است که برای ایجاد swapchain استفاده میشود. -
swapchainاشارهگری به دستهای است که در آن XrDepthSwapchainANDROID ایجادشده برگردانده میشود.
برنامه میتواند از تابع xrCreateDepthSwapchainANDROID برای ایجاد زنجیره تبادل عمق استفاده کند که هم تصاویر عمق و هم تصاویر اطمینان را مدیریت میکند.
- اگر سیستم از ردیابی عمق پشتیبانی نمیکند، زمان اجرا باید
XR_ERROR_FEATURE_UNSUPPORTEDرا برگرداند. - اگر اجازههای لازم به برنامه تماسگیرنده اعطا نشده باشد، زمان اجرا باید
XR_ERROR_PERMISSION_INSUFFICIENTرا برگرداند. - اگر وضوح عمق مشخصشده در XrDepthSwapchainCreateInfoANDROID پشتیبانی نشود، زمان اجرا باید
XR_ERROR_VALIDATION_FAILUREرا برگرداند. - زمان اجرا باید فقط زمانی تصاویر اطمینان عمق را ایجاد کند که بیتهای مربوطه برای
createInfoدر زمان ایجاد زنجیره تعویض تنظیم شده باشند.
دسته زنجیره تعویض عمق برگرداندهشده ممکن است متعاقباً در فراخوانیهای میانای برنامهسازی کاربردی استفاده شود. دستگیره XrDepthSwapchainANDROID باید درنهایت ازطریق تابع xrDestroyDepthSwapchainANDROID آزاد شود.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید پیشاز فراخوانی xrCreateDepthSwapchainANDROID فعال شود -
sessionباید یک دسته XrSession معتبر باشد -
createInfoباید اشارهگری به ساختار معتبر XrDepthSwapchainCreateInfoANDROID باشد -
swapchainباید اشارهگری به دسته XrDepthSwapchainANDROID باشد
کدهای برگشتی
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
ساختار XrDepthSwapchainCreateInfoANDROID بهصورت زیر تعریف میشود:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. resolutionXrDepthCameraResolutionANDROID است که بافتهای عمق و اطمینان با آن ایجاد شدهاند.createFlagsیک یا چند XrDepthSwapchainCreateFlagsANDROID است.
ساختار XrDepthSwapchainCreateInfoANDROID گزینههای ایجاد را برای XrDepthSwapchainANDROID هنگام ارسال به xrCreateDepthSwapchainANDROID ارائه میدهد.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید قبلاز استفاده از XrDepthSwapchainCreateInfoANDROID فعال شود -
typeبایدXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDباشد -
nextبایدNULLیا اشارهگر معتبری به ساختار بعدی در زنجیره ساختار باشد -
resolutionباید مقدار XrDepthCameraResolutionANDROID معتبری باشد -
createFlagsباید ترکیب معتبری از مقادیر XrDepthSwapchainCreateFlagBitsANDROID باشد -
createFlagsنباید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;
توضیحات پرچم
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID— نشان میدهد که swapchain تصاویر عمق همواری ارائه خواهد داد.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID— نشان میدهد که swapchain تصاویر اطمینان عمق همواری ارائه خواهد داد.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID— نشان میدهد که swapchain تصاویر عمق خام ارائه خواهد کرد.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID— نشان میدهد که swapchain تصاویر اطمینان عمق خام را ارائه خواهد داد.
تابع xrDestroyDepthSwapchainANDROID بهصورت زیر تعریف میشود:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
شرح پارامترها
-
swapchainیک دسته XrDepthSwapchainANDROID است که قبلاً توسط xrCreateDepthSwapchainANDROID ایجاد شده است.
تابع xrDestroyDepthSwapchainANDROID زنجیره تعویض عمق را ازبین میبرد. پساز این فراخوانی، زمان اجرا ممکن است همه حافظه و منابع مرتبط را آزاد کند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید پیشاز فراخوانی xrDestroyDepthSwapchainANDROID فعال شود -
swapchainباید یک دسته XrDepthSwapchainANDROID معتبر باشد
ایمنی رشتهای
- دسترسی به
swapchainو هرگونه دسته فرزند باید بهصورت خارجی همگامسازی شود
کدهای برگشتی
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
دسترسی به بافتهای عمق
تابع xrEnumerateDepthSwapchainImagesANDROID بهصورت زیر تعریف میشود:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
شرح پارامترها
-
depthSwapchainXrDepthSwapchainANDROID است که تصاویر از آن دریافت میشود. depthImageCapacityInputظرفیت آرایهdepthImagesاست، یا ۰ برای نشان دادن درخواست بازیابی ظرفیت موردنیاز.-
depthImageCountOutputاشارهگری به تعدادdepthImagesنوشتهشده است، یا اشارهگری به ظرفیت موردنیاز درصورتیکهdepthImageCapacityInputکافی نباشد. -
depthImagesاشارهگری به آرایهای از ساختارهای XrDepthSwapchainImageANDROID است. اگرdepthImageCapacityInputبرابر با ۰ باشد، میتواندNULLباشد. - برای شرح مفصل بازیابی اندازه
depthImagesموردنیاز، بخش پارامترهای اندازه میانگیر را ببینید.
xrEnumerateDepthSwapchainImagesANDROID آرایهای از ساختارهای XrDepthSwapchainImageANDROID را پر میکند. منابع باید ثابت و برای طول عمر XrDepthSwapchainANDROID معتبر باشند. این تابع مشابه xrEnumerateSwapchainImages عمل میکند.
زمان اجرا باید همیشه محتوای میانگیر یکسانی را از این شمارش برای طول عمر swapchain برگرداند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید پیشاز فراخوانی xrEnumerateDepthSwapchainImagesANDROID فعال شود -
depthSwapchainباید یک دسته XrDepthSwapchainANDROID معتبر باشد -
depthImageCountOutputباید اشارهگری به مقدارuint32_tباشد - اگر
depthImageCapacityInput0نباشد،depthImagesباید اشارهگری به آرایهای از ساختارهایdepthImageCapacityInputXrDepthSwapchainImageANDROID باشد
کدهای برگشتی
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
ساختار XrDepthSwapchainImageANDROID بهصورت زیر تعریف میشود:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. rawDepthImageNULLاست یا اشارهگر به تصاویر عمق خام برای هر دو نمای چپ و راست که توسط زمان اجرا اختصاص داده شده است. واحد این مقادیر متر است. مقادیر ویژه:0.0نشاندهنده پیکسل عمق نامعتبر یا خالی در عمق خام است،Infنشاندهنده عمق شناختهشدهای است که بهطور مؤثر در فاصله بینهایت قرار دارد،-
rawDepthConfidenceImageبرابر است باNULLیا اشارهگر به تصاویر اطمینان عمق خام برای هر دو نمای چپ و راست که توسط زمان اجرا اختصاص داده شده است. smoothDepthImageNULLیا اشارهگر به تصاویر عمق هموار برای هر دو نمای چپ و راست است که توسط زمان اجرا اختصاص داده شده است. واحد این مقادیر متر است. مقادیر ویژه:0.0نشاندهنده پیکسل عمق نامعتبر یا خالی در عمق هموار است،Infنشاندهنده عمق شناختهشدهای است که بهطور مؤثری در فاصله بینهایت قرار دارد.smoothDepthConfidenceImageNULLیا اشارهگر به تصاویر اطمینان عمق هموار برای هر دو نمای چپ و راست است که توسط زمان اجرا اختصاص داده شده است.
اشارهگرهای میانگیر تصویر فقط درطول عمر زنجیره تعویض معتبر خواهند بود. وقتی زنجیره تعویض ازبین برود، اشارهگرها معلق درنظر گرفته میشوند.
XrDepthSwapchainImageANDROID نشاندهنده تصاویر ژرف از XrDepthSwapchainANDROID قابلخواندن است که همانطور که در XrDepthSwapchainCreateInfoANDROID :: resolution و XrDepthSwapchainCreateInfoANDROID :: createFlags شرح داده شده است، هنگام فراخوانی xrCreateDepthSwapchainANDROID اختصاص داده شده است. برای هر تصویر عمق:
- مقادیر تصویر در حافظه بهترتیب ردیف-اصلی و بدون فاصله بین ردیفها چیده شدهاند.
- مقدار اول بالا سمت راست و مقدار آخر پایین سمت چپ است.
- اندازه حافظه اشارهشده با مقدار xrEnumerateDepthSwapchainImagesANDROID تعیین میشود و با XrDepthSwapchainCreateInfoANDROID ::
resolutionهنگام فراخوانی xrCreateDepthSwapchainANDROID تنظیم میشود. برای مثال، اگر XrDepthSwapchainCreateInfoANDROID ::resolutionبرابر باXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROIDباشد، اندازه تصاویر عمق2*160*160*sizeof(float)خواهد بود. - اگر XrDepthSwapchainCreateInfoANDROID ::
createFlagsشاملXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROIDنباشد، مقدارrawDepthImageبایدNULLباشد. - اگر XrDepthSwapchainCreateInfoANDROID ::
createFlagsشاملXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROIDنباشد، مقدارrawDepthConfidenceImageبایدNULLباشد. - اگر XrDepthSwapchainCreateInfoANDROID ::
createFlagsشاملXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROIDنباشد، مقدارsmoothDepthImageبایدNULLباشد. - اگر XrDepthSwapchainCreateInfoANDROID ::
createFlagsشاملXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROIDنباشد، مقدارsmoothDepthImageبایدNULLباشد.
استفاده معتبر (ضمنی)
- افزونه
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 بین هر جفت تماس متناظر xrBeginFrame و xrEndFrame در یک جلسه وجود داشته باشد.
- اگر تصاویر زنجیره تعویض که قبلاً بهدست آمدهاند همچنان توسط زمان اجرا استفاده شوند، زمان اجرا ممکن است مسدود شود.
- اگر xrAcquireDepthSwapchainImagesANDROID قبلاز xrBeginFrame یا بعداز xrEndFrame فراخوانی شود، زمان اجرا باید
XR_ERROR_CALL_ORDER_INVALIDرا برگرداند. - اگر xrAcquireDepthSwapchainImagesANDROID بیشاز یکبار در هر فریم فراخوانی شود، زمان اجرا باید
XR_ERROR_LIMIT_REACHEDرا برگرداند - یعنی در یک جلسه درحال اجرا، پساز فراخوانی xrBeginFrame که xrEndFrame مرتبط نداشته است. - اگر دادههای عمق محیط هنوز دردسترس نباشد، زمان اجرا ممکن است
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDرا برگرداند. اگر این اتفاق بیفتد، برنامه باید xrAcquireDepthSwapchainImagesANDROID را دوباره در فریم بعدی فراخوانی کند.
استفاده معتبر (ضمنی)
- افزونه
XR_ANDROID_depth_textureباید پیشاز فراخوانی xrAcquireDepthSwapchainImagesANDROID فعال شود -
depthSwapchainباید یک دسته XrDepthSwapchainANDROID معتبر باشد -
acquireInfoباید اشارهگری به ساختار معتبر XrDepthAcquireInfoANDROID باشد -
acquireResultباید اشارهگری به ساختار XrDepthAcquireResultANDROID باشد
کدهای برگشتی
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
ساختار XrDepthAcquireInfoANDROID بهصورت زیر تعریف میشود:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. -
spaceیک XrSpace است که قاب مرجع حالت برگرداندهشده را در XrDepthAcquireResultANDROID ::viewsتعریف میکند. -
displayTimeیک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;
توضیحات عضو
typeXrStructureType این ساختار است.-
nextبرابر باNULLیا اشارهگری به ساختار بعدی در زنجیره ساختار است. چنین ساختارهایی در OpenXR اصلی یا این افزونه تعریف نشده است. -
acquiredIndexنمایه بافت بهدستآمده در آرایه XrDepthSwapchainImageANDROID است که توسط xrEnumerateDepthSwapchainImagesANDROID شمارش شده است. exposureTimestampXrTimeاست که زمان ثبت نقشه عمق را مشخص میکند.-
viewsآرایهای از دو XrDepthViewANDROID است، یکی برای هر چشم، که در آن شاخص ۰ چشم چپ و شاخص ۱ چشم راست است.
استفاده معتبر (ضمنی)
- افزونه
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;
توضیحات عضو
typeXrStructureType این ساختار است.-
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
float tanf(float);
// 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,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.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,
};
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(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below 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.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is 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 = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
انواع شیء جدید
فرمانهای جدید
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
سازههای جدید
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
درحال گسترش دادن XrSystemProperties :
Enums جدید
ماسکهای بیتی جدید
ثابتهای شمارشی جدید
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONدرحال گسترش دادن XrObjectType :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
درحال گسترش دادن XrResult :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
درحال گسترش دادن XrStructureType :
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
مشکلات
سابقه نسخه
بازبینی ۱، ۲۰۲۴/۰۹/۰۹ (Levana Chen)
- شرح اولیه افزونه