پسوند OpenXR XR_ANDROID_depth_texture

رشته نام

XR_ANDROID_depth_texture

نوع پسوند

پسوند نمونه

شماره برنامه افزودنی ثبت شده

703

تجدید نظر

1

وابستگی های افزونه و نسخه

OpenXR 1.0

آخرین تاریخ اصلاح

11-09-2024

وضعیت IP

هیچ ادعای IP شناخته شده ای وجود ندارد.

مشارکت کنندگان

سوشانت کولکارنی، گوگل

Cairn Overturf، گوگل

اسپنسر کوین، گوگل

لوانا چن، گوگل

نمای کلی

این برنامه افزودنی به برنامه اجازه می‌دهد تا نقشه‌های عمق محیط دنیای واقعی اطراف هدست را درخواست کند و وضوح‌های عمق پشتیبانی شده را در هنگام ایجاد جستجو کند.

این پسوند برای نشان دادن عمق خام و صاف برای انسداد، تست ضربه و سایر کارهای خاص است که از هندسه صحنه دقیق استفاده می کند، به عنوان مثال، تشخیص چهره تقلبی.

قابلیت سیستم را بررسی کنید

ساختار XrSystemDepthTrackingPropertiesANDROID به صورت زیر تعریف می شود:

typedef struct XrSystemDepthTrackingPropertiesANDROID {
    XrStructureType    type;
    const void*        next;
    XrBool32           supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;

توضیحات اعضا

  • type XrStructureType این ساختار است.
  • next NULL یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است.
  • supportsDepthTracking یک XrBool32 است که نشان می دهد آیا سیستم فعلی از ردیابی عمق پشتیبانی می کند یا خیر.

هنگام فراخوانی xrGetSystemProperties ، یک برنامه کاربردی می‌تواند بررسی کند که آیا سیستم قادر به ردیابی عمق است یا خیر .

استفاده معتبر (ضمنی)

وضوح عمق پرس و جو

تابع xrEnumerateDepthResolutionsANDROID به صورت زیر تعریف می شود:

XrResult xrEnumerateDepthResolutionsANDROID(
    XrSession                                   session,
    uint32_t                                    resolutionCapacityInput,
    uint32_t*                                   resolutionCountOutput,
    XrDepthCameraResolutionANDROID*             resolutions);

توضیحات پارامترها

  • session XrSession است که وضوح عمق پشتیبانی شده را برمی شمارد.
  • resolutionCapacityInput ظرفیت resolutions یا 0 برای بازیابی ظرفیت مورد نیاز است.
  • resolutionCountOutput یک اشاره گر به تعداد resolutions uint64_t نوشته شده است، یا یک اشاره گر به ظرفیت مورد نیاز در صورتی که resolutionCapacityInput کافی نباشد.
  • resolutions اشاره گر به آرایه ای از XrDepthCameraResolutionANDROID است، اما اگر resolutionCapacityInput 0 باشد می تواند NULL باشد.
  • برای توضیحات دقیق در مورد بازیابی اندازه resolutions مورد نیاز، به بخش پارامترهای اندازه بافر مراجعه کنید.

xrEnumerateDepthResolutionsANDROID وضوح عمق پشتیبانی شده توسط جلسه جاری را برمی شمارد. وضوح عمق باید به ترتیب از بالاترین به پایین ترین اولویت زمان اجرا باشد. برنامه باید از بالاترین اولویتی که برای عملکرد و کیفیت مطلوب پشتیبانی می کند استفاده کند.

استفاده معتبر (ضمنی)

کدهای بازگشت

موفقیت

  • 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 — وضوح تصاویر با عمق و اطمینان 80x80 است.
  • XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID — وضوح تصاویر با عمق و اطمینان 160x160 است.
  • XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID — وضوح تصاویر با عمق و اطمینان 320x320 است.

یک swapchain عمق ایجاد کنید

XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)

XrDepthSwapchainANDROID یک دسته swapchain عمق است.

تابع xrCreateDepthSwapchainANDROID به صورت زیر تعریف می شود:

XrResult xrCreateDepthSwapchainANDROID(
    XrSession                                   session,
    const XrDepthSwapchainCreateInfoANDROID*    createInfo,
    XrDepthSwapchainANDROID*                    swapchain);

توضیحات پارامترها

  • session XrSession است که زنجیره تبادل عمق را ایجاد می کند.

  • createInfo یک اشاره گر به ساختار XrDepthSwapchainCreateInfoANDROID است که حاوی پارامترهایی است که برای ایجاد swapchain استفاده می شود.

  • swapchain یک اشاره گر به یک دسته است که در آن XrDepthSwapchainANDROID ایجاد شده برگردانده می شود.

این برنامه می تواند از تابع xrCreateDepthSwapchainANDROID برای ایجاد یک swapchain عمق استفاده کند که هم عمق و هم تصاویر مطمئن را مدیریت می کند.

دستگیره swapchain عمق برگشتی ممکن است متعاقباً در تماس‌های API استفاده شود. دسته XrDepthSwapchainANDROID باید در نهایت با استفاده از تابع xrDestroyDepthSwapchainANDROID آزاد شود.

استفاده معتبر (ضمنی)

کدهای بازگشت

موفقیت

  • 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 است.

ساختار XrDepthSwapchainCreateInfoANDROID هنگامی که به xrCreateDepthSwapchainANDROID منتقل می شود، گزینه های ایجاد را برای XrDepthSwapchainANDROID فراهم می کند.

استفاده معتبر (ضمنی)

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 زنجیره تبادل عمق را از بین می برد.

استفاده معتبر (ضمنی)

ایمنی نخ

  • دسترسی به 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 است. اگر depthImageCapacityInput 0 باشد می تواند NULL باشد.
  • برای توضیح دقیق بازیابی اندازه depthImages ، به بخش پارامترهای اندازه بافر مراجعه کنید.

xrEnumerateDepthSwapchainImagesANDROID آرایه ای از ساختارهای XrDepthSwapchainImageANDROID را پر می کند. منابع برای طول عمر XrDepthSwapchainANDROID ثابت و معتبر خواهند بود. این تابع مشابه xrEnumerateSwapchainImages رفتار می کند.

استفاده معتبر (ضمنی)

کدهای بازگشت

موفقیت

  • 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 یا اشاره گر به تصاویر عمق خام برای هر دو نمای چپ و راست است. مقادیر دارای واحد متر هستند. مقادیر ویژه: 0.0 یک پیکسل عمق نامعتبر یا خالی در عمق خام را نشان می دهد، Inf نشان دهنده عمق شناخته شده است که عملاً بی نهایت دور است.
  • rawDepthConfidenceImage NULL یا اشاره گر به تصاویر با اطمینان عمق خام برای هر دو نمای چپ و راست است.
  • smoothDepthImage NULL یا اشاره گر برای صاف کردن تصاویر عمق برای هر دو نمای چپ و راست است. مقادیر دارای واحد متر هستند. مقادیر ویژه: 0.0 یک پیکسل عمق نامعتبر یا خالی در عمق صاف را نشان می دهد، Inf نشان دهنده عمق شناخته شده است که عملاً بی نهایت دور است.
  • smoothDepthConfidenceImage NULL یا اشاره گر برای صاف کردن تصاویر با اطمینان عمق برای هر دو نمای چپ و راست است.

XrDepthSwapchainImageANDROID تصاویر عمقی را از یک XrDepthSwapchainANDROID خوانا نشان می دهد، که همانطور که در XrDepthSwapchainCreateInfoANDROID::رزولوشن و XrDepthSwapchainCreateInfoANDROID::createFlagswapAANDROID::createFlags ANDROIDReateDroID توضیح داده شده است، اختصاص داده شده است. برای هر تصویر عمق:

  • مقادیر تصویر به ترتیب ردیف اصلی در حافظه قرار می‌گیرند، بدون اینکه بین سطرها قرار بگیرند.
  • مقدار اول بالا سمت چپ و آخرین مقدار پایین سمت راست است.
  • اندازه حافظه اشاره شده با مقدار xrEnumerateDepthSwapchainImagesANDROID تعیین می شود و با XrDepthSwapchainCreateInfoANDROID::رزولوشن در هنگام فراخوانی xrCreateDepthSwapchainANDROID تنظیم می شود. به عنوان مثال، اگر 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 را تنظیم نکرده باشد، مقدار smoothDepthConfidenceImage باید NULL باشد.

استفاده معتبر (ضمنی)

تابع xrAcquireDepthSwapchainImagesANDROID به صورت زیر تعریف می شود:

XrResult xrAcquireDepthSwapchainImagesANDROID(
    XrDepthSwapchainANDROID                     depthSwapchain,
    const XrDepthAcquireInfoANDROID*            acquireInfo,
    XrDepthAcquireResultANDROID*                acquireResult);

توضیحات پارامترها

  • depthSwapchain یک دسته XrDepthSwapchainANDROID برای تصویر عمق است.
  • acquireInfo یک XrDepthAcquireInfoANDROID است که حاوی اطلاعاتی در مورد نحوه بدست آوردن تصویر عمق است.
  • acquireResult XrDepthAcquireResultANDROID بازگشتی است که حاوی اطلاعاتی درباره عمق تصویر به دست آمده است.

برنامه‌ها می‌توانند از تابع xrAcquireDepthSwapchainImagesANDROID برای به دست آوردن آخرین فهرست تصویر swapchain موجود، مانند XrDepthAcquireResultANDROID::acquiredIndex ، در آرایه XrDepthSwapchainImageANDROID که توسط xrDepthmagthEnumerateSANDROID برشمرده شده است، استفاده کنند. XrDepthAcquireResultANDROID برگردانده شده همچنین حاوی اطلاعات دیگری مانند میدان دید و وضعیت است که برای تفسیر داده های عمق ضروری است. خواندن از شکاف به دست آمده در آرایه تصویر تا تماس بعدی با xrAcquireDepthSwapchainImagesANDROID امن است.

نباید بیش از یک تماس با xrAcquireDepthSwapchainImagesANDROID بین هر جفت تماس xrBeginFrame و xrEndFrame مربوطه در یک جلسه وجود داشته باشد.

استفاده معتبر (ضمنی)

کدهای بازگشت

موفقیت

  • 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::views تعریف می‌کند.
  • displayTime یک XrTime است که زمان مورد استفاده برای محاسبه ژست برای پوز برگشتی در XrDepthAcquireResultANDROID::views را مشخص می کند. برنامه ها باید زمان نمایش پیش بینی شده خود را برای فریم فعلی بگذرانند.

استفاده معتبر (ضمنی)

ساختار 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 چشم راست است.

استفاده معتبر (ضمنی)

ساختار XrDepthViewANDROID به صورت زیر تعریف می شود:

typedef struct XrDepthViewANDROID {
    XrStructureType    type;
    const void*        next;
    XrFovf             fov;
    XrPosef            pose;
} XrDepthViewANDROID;

توضیحات اعضا

  • type XrStructureType این ساختار است.
  • next NULL یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است.
  • fov یک XrFovf است که میدان دید مورد استفاده برای تولید این نما را مشخص می کند. نما هرگز به صورت افقی و عمودی چرخانده نمی شود.
  • pose یک XrPosef است که موقعیتی را که نقشه عمق از آن ارائه شده است را مشخص می کند. چارچوب مرجع در XrDepthAcquireInfoANDROID مشخص شده است.

استفاده معتبر (ضمنی)

کد مثال برای ردیابی عمق

کد مثال زیر نحوه بدست آوردن تصاویر عمقی را نشان می دهد.

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

فهرست های جدید

ساختارهای جدید

توابع جدید

مسائل

تاریخچه نسخه

  • بازبینی 1، 09-09-2024 (لوانا چن)
    • توضیحات پسوند اولیه