XR_ANDROID_depth_texture
Name String
XR_ANDROID_depth_texture
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
703
المراجعة
1
حالة التصديق
لم تتم المصادقة عليها
الاعتماد على الإضافات والإصدارات
تاريخ آخر تعديل
2024-09-11
حالة الملكية الفكرية
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
سوشانت كولكارني، Google
كيرن أوفرتورف، Google
سبنسر كوين، Google
ليفانا تشن، 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;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
supportsDepthTrackingهي قيمةXrBool32تشير إلى ما إذا كان النظام الحالي يتيح تتبُّع العمق.
يمكن للتطبيق فحص ما إذا كان النظام قادرًا على تتبُّع العمق من خلال توسيع XrSystemProperties باستخدام بنية XrSystemDepthTrackingPropertiesANDROID عند استدعاء xrGetSystemProperties .
إذا عرضت بيئة التشغيل XR_FALSE لـ supportsDepthTracking، يجب أن تعرض بيئة التشغيل XR_ERROR_FEATURE_UNSUPPORTED من xrCreateDepthSwapchainANDROID .
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_depth_textureقبل استخدام XrSystemDepthTrackingPropertiesANDROID - يجب أن يكون
typeXR_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_tresolutionsالمكتوبة، أو مؤشر إلى السعة المطلوبة في حال عدم كفايةresolutionCapacityInput. -
resolutionsهو مؤشر إلى مصفوفة من XrDepthCameraResolutionANDROID، ولكن يمكن أن يكونNULLإذا كانresolutionCapacityInputهو0. - يُرجى الاطّلاع على قسم مَعلمات حجم ذاكرة التخزين المؤقت للحصول على وصف تفصيلي لاسترداد حجم
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 درجات دقة العمق المتوافقة عند إنشاء 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— تبلغ دقة صور العمق والثقة 80x80.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— تبلغ دقة صور العمق والثقة 160×160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— تبلغ دقة صور العمق والثقة 320×320.
إنشاء سلسلة تبديل للعمق
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID هو اسم معرِّف لسلسلة تبديل العمق.
يتم تعريف الدالة xrCreateDepthSwapchainANDROID على النحو التالي:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
أوصاف المَعلمات
-
sessionهي XrSession التي تنشئ سلسلة تبديل العمق. -
createInfoهو مؤشر إلى بنية XrDepthSwapchainCreateInfoANDROID تحتوي على مَعلمات يتم استخدامها لإنشاء سلسلة التبديل. -
swapchainهو مؤشر إلى اسم معرِّف يتم فيه عرض XrDepthSwapchainANDROID الذي تم إنشاؤه.
يمكن للتطبيق استخدام دالة xrCreateDepthSwapchainANDROID لإنشاء سلسلة تبديل العمق التي تدير كلاً من صور العمق والثقة.
- يجب أن تعرض بيئة التشغيل القيمة
XR_ERROR_FEATURE_UNSUPPORTEDإذا كان النظام لا يتيح تتبُّع العمق. - يجب أن يعرض وقت التشغيل
XR_ERROR_PERMISSION_INSUFFICIENTإذا لم يتم منح الأذونات المطلوبة لتطبيق الاتصال. - يجب أن يعرض وقت التشغيل القيمة
XR_ERROR_VALIDATION_FAILUREإذا كانت درجة دقة العمق المحدّدة في XrDepthSwapchainCreateInfoANDROID غير متوافقة. - يجب أن ينشئ وقت التشغيل صورًا لمستوى الثقة في العمق فقط عند ضبط وحدات البت المقابلة لـ
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;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
resolutionهي السمة XrDepthCameraResolutionANDROID التي يتم إنشاء زخارف العمق والثقة باستخدامها. -
createFlagsهي قيمة واحدة أو أكثر من XrDepthSwapchainCreateFlagsANDROID .
توفّر بنية XrDepthSwapchainCreateInfoANDROID خيارات إنشاء لـ XrDepthSwapchainANDROID عند تمريرها إلى xrCreateDepthSwapchainANDROID .
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_depth_textureقبل استخدام XrDepthSwapchainCreateInfoANDROID - يجب أن يكون
typeXR_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: تشير إلى أنّ سلسلة التبديل ستوفّر صورًا سلسة للعمق. -
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: يشير إلى أنّ سلسلة التبديل ستوفّر صورًا أولية لمستوى الثقة في العمق.
يتم تعريف الدالة xrDestroyDepthSwapchainANDROID على النحو التالي:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
أوصاف المَعلمات
-
swapchainهو مؤشر XrDepthSwapchainANDROID تم إنشاؤه سابقًا بواسطة xrCreateDepthSwapchainANDROID .
تؤدي الدالة xrDestroyDepthSwapchainANDROID إلى تدمير سلسلة تبديل العمق. بعد هذا الاستدعاء، قد يحرّر وقت التشغيل جميع الذاكرة والموارد ذات الصلة.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_depth_textureقبل طلب xrDestroyDepthSwapchainANDROID - يجب أن يكون
swapchainاسم معرِّف صالحًا لـ XrDepthSwapchainANDROID
أمان Thread
- يجب مزامنة الوصول إلى
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);
أوصاف المَعلمات
-
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هي0، يجب أن تكون قيمة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;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
rawDepthImageهوNULLأو المؤشر إلى صور العمق الأولية لكل من العرضَين الأيمن والأيسر اللذين يخصّصهما وقت التشغيل. وتكون القيم بوحدة المتر. القيم الخاصة: تشير القيمة0.0إلى بكسل عمق غير صالح أو فارغ في العمق الأوّلي، وتشير القيمةInfإلى عمق معروف بعيد بشكل لا نهائي، -
rawDepthConfidenceImageهيNULLأو المؤشر إلى صور الثقة في العمق الأوّلي لكل من العرضَين الأيمن والأيسر اللذين تم تخصيصهما من خلال وقت التشغيل. -
smoothDepthImageهوNULLأو المؤشر إلى صور العمق السلسة لكل من العرضَين الأيمن والأيسر اللذين يخصّصهما وقت التشغيل. وتكون القيم بوحدة المتر. القيم الخاصة: تشير القيمة0.0إلى بكسل عمق غير صالح أو فارغ في العمق السلس، بينما تشير القيمةInfإلى عمق معروف بعيد بشكل لا نهائي. -
smoothDepthConfidenceImageهوNULLأو المؤشر إلى صور الثقة في العمق السلس لكل من العرضَين الأيمن والأيسر اللذين يخصّصهما وقت التشغيل.
ستكون مؤشرات مخزن الصور المؤقت صالحة فقط خلال فترة عمل سلسلة التبديل. بعد تدمير سلسلة التبديل، سيتم اعتبار المؤشرات معلّقة.
يمثّل XrDepthSwapchainImageANDROID صور العمق من XrDepthSwapchainANDROID قابل للقراءة، ويتم تخصيصه كما هو موضّح في XrDepthSwapchainCreateInfoANDROID :: resolution وXrDepthSwapchainCreateInfoANDROID :: createFlags أثناء استدعاء xrCreateDepthSwapchainANDROID . لكل صورة عمق:
- يتم وضع قيم الصور في الذاكرة بترتيب الصف الرئيسي، بدون مساحة متروكة بين الصفوف.
- القيمة الأولى هي أعلى اليسار والقيمة الأخيرة هي أسفل اليمين.
- يتم تحديد حجم الذاكرة التي تتم الإشارة إليها من خلال قيمة xrEnumerateDepthSwapchainImagesANDROID ويتم ضبطها من خلال XrDepthSwapchainCreateInfoANDROID ::
resolutionأثناء استدعاء xrCreateDepthSwapchainANDROID . على سبيل المثال، إذا كانت قيمةresolutionفي XrDepthSwapchainCreateInfoANDROID هيXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID، سيكون حجم صور العمق2*160*160*sizeof(float). - يجب أن تكون قيمة
rawDepthImageهيNULLإذا لم يتضمّنXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROIDXrDepthSwapchainCreateInfoANDROID ::createFlags. - يجب أن تكون قيمة
rawDepthConfidenceImageهيNULLإذا لم يتضمّنXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROIDXrDepthSwapchainCreateInfoANDROID ::createFlags. - يجب أن تكون قيمة
smoothDepthImageهيNULLإذا لم يتضمّنXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROIDXrDepthSwapchainCreateInfoANDROID ::createFlags. - يجب أن تكون قيمة
smoothDepthImageهيNULLإذا لم يتضمّنXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROIDXrDepthSwapchainCreateInfoANDROID ::createFlags.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_depth_textureقبل استخدام XrDepthSwapchainImageANDROID - يجب أن يكون
typeXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية
يتم تعريف الدالة xrAcquireDepthSwapchainImagesANDROID على النحو التالي:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
أوصاف المَعلمات
-
depthSwapchainهو مقبض XrDepthSwapchainANDROID لصورة العمق. -
acquireInfoهو XrDepthAcquireInfoANDROID يحتوي على معلومات حول كيفية الحصول على صورة العمق. -
acquireResultهي القيمة المعروضة XrDepthAcquireResultANDROID التي تحتوي على معلومات حول صورة العمق التي تم الحصول عليها.
يمكن للتطبيقات استخدام دالة xrAcquireDepthSwapchainImagesANDROID للحصول على أحدث فهرس متاح لصورة سلسلة التبديل، أي XrDepthAcquireResultANDROID :: acquiredIndex ، في مصفوفة XrDepthSwapchainImageANDROID التي تم تعدادها بواسطة xrEnumerateDepthSwapchainImagesANDROID . تحتوي النتيجة XrDepthAcquireResultANDROID التي تم عرضها أيضًا على معلومات أخرى، مثل مجال الرؤية والوضعية اللازمة لتفسير بيانات العمق. يمكن القراءة بأمان من الخانة المكتسَبة في مصفوفة الصور إلى أن يتم إجراء الطلب التالي إلى xrAcquireDepthSwapchainImagesANDROID .
يجب ألا يكون هناك أكثر من استدعاء واحد لـ xrAcquireDepthSwapchainImagesANDROID بين أي زوج من استدعاءات xrBeginFrame وxrEndFrame المقابلة في جلسة واحدة.
- قد يحظر وقت التشغيل إذا كانت صور سلسلة التبديل التي تم الحصول عليها سابقًا لا تزال قيد الاستخدام من قِبل وقت التشغيل.
- يجب أن يعرض وقت التشغيل
XR_ERROR_CALL_ORDER_INVALIDإذا تم استدعاء xrAcquireDepthSwapchainImagesANDROID قبل xrBeginFrame أو بعد xrEndFrame . - يجب أن تعرض بيئة التشغيل
XR_ERROR_LIMIT_REACHEDإذا تم استدعاء xrAcquireDepthSwapchainImagesANDROID أكثر من مرة لكل لقطة، أي في جلسة قيد التشغيل، بعد استدعاء 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;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. spaceهو XrSpace يحدّد الإطار المرجعي للوضعية المعروضة في XrDepthAcquireResultANDROID ::views.-
displayTimeهوXrTimeيحدّد الوقت المستخدَم لاحتساب الوضعية التي يتم عرضها في XrDepthAcquireResultANDROID ::views. يجب أن تمرّر التطبيقات وقت العرض المتوقّع للإطار الحالي.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_depth_textureقبل استخدام XrDepthAcquireInfoANDROID - يجب أن يكون
typeXR_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 التي تم تعدادها بواسطة xrEnumerateDepthSwapchainImagesANDROID . -
exposureTimestampهي السمةXrTimeالتي تحدّد وقت التقاط خريطة العمق. -
viewsهي مصفوفة من عنصرَي XrDepthViewANDROID، واحد لكل عين، حيث يمثّل الفهرس 0 العين اليسرى والفهرس 1 العين اليمنى.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_depth_textureقبل استخدام XrDepthAcquireResultANDROID - يجب أن يكون
typeXR_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 - يجب أن يكون
typeXR_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 :
عمليات تعداد جديدة
أقنعة بت جديدة
ثوابت تعداد جديدة
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
المشاكل
سجلّ الإصدارات
المراجعة 1، 09-09-2024 (ليفانا تشن)
- الوصف الأولي للإضافة