XR_ANDROID_spatial_discovery_bounds

Name String

XR_ANDROID_spatial_discovery_bounds

نوع الإضافة

إضافة مثيل

رقم الإضافة المسجَّل

762

المراجعة

1

حالة التصديق

لم تتم المصادقة عليها

الاعتماد على الإضافات والإصدارات

XR_EXT_spatial_entity

المساهمون

"نيهف جين"، Google
"ناتالي فلوري"، Meta
"يويتشي تاغوتشي"، Meta
"يين لي"، Microsoft
"رون بيسمز"، Meta
"كارثيك كادابان"، Magic Leap
"جيمي ألامبارامبيل"، ByteDance
"تشيبينغ ليو"، ByteDance
"جون يان"، ByteDance

نظرة عامة

تضيف هذه الإضافة تعريفات للحدود المكانية التي تسمح للتطبيقات بفلترة الكيانات المكانية التي تم اكتشافها عند طلب xrCreateSpatialDiscoverySnapshotAsyncEXT .

الحدود المكانية

يتم تحديد بنية XrSpatialBoundsSpherefANDROID على النحو التالي:

typedef struct XrSpatialBoundsSpherefANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
    XrSpheref          sphere;
} XrSpatialBoundsSpherefANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫space هو XrSpace الذي يتم فيه تحديد أي أوضاع للحدود.
  • ‫time هو XrTime يتم فيه تحديد وضعيات الحدود.
  • ‫sphere هو XrSpheref يصف الحجم الكروي الذي يجب أن يقيّد وقت التشغيل فيه عملية اكتشاف الكيانات المكانية.

تتيح الإمكانات المكانية التي تتوافق مع XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID (كما هو موضّح في xrEnumerateSpatialCapabilityFeaturesEXT ) للتطبيق حصر عملية الاستكشاف على الكيانات المكانية التي يقع موقعها الجغرافي أو حدودها ضمن sphere أو تتقاطع معها من خلال ربط XrSpatialBoundsSpherefANDROID بـ XrSpatialDiscoverySnapshotCreateInfoEXT :: next . بالنسبة إلى لقطة الاستكشاف التي تتيح فيها الميزة السارية استخدام XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID، إذا كانت هذه البنية متوفّرة في سلسلة next، يجب ألا يتضمّن وقت التشغيل أي كيانات مكانية يقع موقعها الجغرافي أو حدودها خارج sphere بالكامل.

يُرجى العِلم أنّ تضمين XrSpatialBoundsSpherefANDROID في السلسلة التالية من XrSpatialDiscoverySnapshotCreateInfoEXT يعمل كشرط "AND" مع الفلاتر الأخرى المقدَّمة. يجب عدم تضمين الكيانات الواردة من الإمكانات المكانية التي لا تتيح استخدام XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID في لقطة الاستكشاف. يختلف هذا السلوك عن بقية مواصفات OpenXR حيث يتم تجاهل البُنى غير المعروفة أو غير المتوافقة في سلسلة المؤشرات التالية من خلال وقت التشغيل. كما هو موضّح في قسم تفرُّد بنية السلسلة التالية، لن تعالج بيئة التشغيل سوى التكرار الأول لبنية XrSpatialBoundsSpherefANDROID في السلسلة التالية.

الاستخدام الصالح (ضمني)

يتم تحديد بنية XrSpatialBoundsBoxfANDROID على النحو التالي:

typedef struct XrSpatialBoundsBoxfANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
    XrBoxf             box;
} XrSpatialBoundsBoxfANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫space هو XrSpace الذي يتم فيه تحديد أي أوضاع للحدود.
  • ‫time هو XrTime يتم فيه تحديد وضعيات الحدود.
  • ‫box هو XrBoxf يصف حجم المربّع الذي يجب أن يقيّد وقت التشغيل فيه عملية اكتشاف الكيانات المكانية.

تتيح الإمكانات المكانية التي تتوافق مع XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID (كما هو موضّح في xrEnumerateSpatialCapabilityFeaturesEXT ) للتطبيق حصر عملية الاكتشاف على الكيانات المكانية التي يقع موقعها الجغرافي أو حدودها ضمن box أو تتقاطع معها من خلال ربط XrSpatialBoundsBoxfANDROID بـ XrSpatialDiscoverySnapshotCreateInfoEXT :: next . بالنسبة إلى لقطة الاستكشاف التي تتيح فيها الميزة السارية استخدام XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID، إذا كانت هذه البنية متوفّرة في سلسلة next، يجب ألا يتضمّن وقت التشغيل أي كيانات مكانية يقع موقعها الجغرافي أو حدودها خارج box بالكامل.

يُرجى العِلم أنّ تضمين XrSpatialBoundsBoxfANDROID في السلسلة التالية من XrSpatialDiscoverySnapshotCreateInfoEXT يعمل كشرط "AND" مع الفلاتر الأخرى المقدَّمة. يجب عدم تضمين الكيانات الواردة من الإمكانات المكانية التي لا تتيح استخدام XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID في لقطة الاستكشاف. يختلف هذا السلوك عن بقية مواصفات OpenXR حيث يتم تجاهل البُنى غير المعروفة أو غير المتوافقة في سلسلة المؤشرات التالية من خلال وقت التشغيل. بالإضافة إلى ذلك، كما هو موضّح في قسم تفرُّد بنية السلسلة التالية، لن تعالج بيئة التشغيل سوى التكرار الأول لبنية XrSpatialBoundsBoxfANDROID في السلسلة التالية.

الاستخدام الصالح (ضمني)

يتم تحديد بنية XrSpatialBoundsFrustumfANDROID على النحو التالي:

typedef struct XrSpatialBoundsFrustumfANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
    XrFrustumf         frustum;
} XrSpatialBoundsFrustumfANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫space هو XrSpace الذي يتم فيه تحديد أي أوضاع للحدود.
  • ‫time هو XrTime يتم فيه تحديد وضعيات الحدود.
  • ‫frustum هي سمة XrFrustumf التي تصف حجم الهرم الناقص الذي يجب أن يقيّد وقت التشغيل اكتشافه للكيانات المكانية ضمنه.

تتيح الإمكانات المكانية التي تتوافق مع XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID (كما هو موضّح في xrEnumerateSpatialCapabilityFeaturesEXT ) للتطبيق حصر عملية الاستكشاف على الكيانات المكانية التي يقع موقعها الجغرافي أو حدودها ضمن frustum أو تتقاطع معها من خلال ربط XrSpatialBoundsFrustumfANDROID بـ XrSpatialDiscoverySnapshotCreateInfoEXT :: next . بالنسبة إلى لقطة الاستكشاف التي تتيح فيها الميزة السارية استخدام XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID، إذا كانت هذه البنية متوفّرة في سلسلة next، يجب ألا يتضمّن وقت التشغيل أي كيانات مكانية يقع موقعها الجغرافي أو حدودها خارج frustum بالكامل.

يُرجى العِلم أنّ تضمين XrSpatialBoundsFrustumfANDROID في السلسلة التالية من XrSpatialDiscoverySnapshotCreateInfoEXT يعمل كشرط "AND" مع الفلاتر الأخرى المقدَّمة. يجب عدم تضمين الكيانات الواردة من الإمكانات المكانية التي لا تتيح استخدام XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID في لقطة الاستكشاف. يختلف هذا السلوك عن بقية مواصفات OpenXR حيث يتم تجاهل البُنى غير المعروفة أو غير المتوافقة في سلسلة المؤشرات التالية من خلال وقت التشغيل. وكما هو موضّح في قسم تفرُّد بنية السلسلة التالية، لن تعالج بيئة التشغيل سوى التكرار الأول لبنية XrSpatialBoundsFrustumfANDROID في السلسلة التالية.

الاستخدام الصالح (ضمني)

مثال

يوضّح الرمز التالي كيفية استخدام الحدود المكانية لفلترة عملية اكتشاف الكيانات المكانية.

// previously initialized & configured with the XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability.
XrSpatialContextEXT spatialContext;

// Enumerate supported features for XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability
uint32_t featureCount = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> fooFeatures(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, featureCount, &featureCount, fooFeatures.data()));

// Check if spatial sphere bounds filter is supported
const auto supportsFeature = [&fooFeatures](XrSpatialCapabilityFeatureEXT feature) {
  return std::find(fooFeatures.begin(), fooFeatures.end(), feature) != fooFeatures.end();
};

const bool supportsSphereBoundsFilter = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID);

// We want to look for entities in a sphere around the head with a radius of 2m.
XrSpatialBoundsSpherefANDROID sphereBounds {
  .type = XR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID,
  .space = viewSpace,
  .time = predictedDisplayTime,
  .sphere = {
    .center = {
      .orientation = {
        .w = 1.0f,
      },
    },
    .radius = 2.0f,
  },
};

// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents{XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};

XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
  .type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
  .next = supportsSphereBoundsFilter ? &sphereBounds : nullptr,
  .componentTypeCount = snapshotComponents.size(),
  .componentTypes = snapshotComponents.data(),
};

XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));

منشآت جديدة

ثوابت تعداد جديدة

  • XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAME
  • XR_ANDROID_spatial_discovery_bounds_SPEC_VERSION
  • توسيع XrSpatialCapabilityFeatureEXT :

    • XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
  • توسيع XrStructureType :

    • XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID
    • XR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID
    • XR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID

المشاكل

  • لماذا يعتمد دعم الحدود المكانية على تعريف XrSpatialCapabilityFeatureEXT؟

    • تم الحلّ
    • الإجابة: لا يمكن لكل ميزة مكانية أن تتيح الحدود المكانية. ومن الأمثلة على ذلك كيان حاوية عالمي افتراضي ليس له أي موضع مكاني أو حدود خاصة به ولكنه يساعد فقط في جمع وتنظيم الكيانات الأخرى بداخله. تساعد قيم XrSpatialCapabilityFeatureEXT التي تم تعدادها حسب الإمكانية في إعلام التطبيق بإمكانية فلترة الحدود المكانية.

سجلّ الإصدارات

  • المراجعة 1، بتاريخ ‎03/05/2025 (نيهان جاين، Google)

    • الوصف الأولي للإضافة