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 في السلسلة التالية.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_spatial_discovery_boundsقبل استخدام XrSpatialBoundsSpherefANDROID - يجب أن يكون
typeXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
spaceاسم معرِّف صالحًا على XrSpace
يتم تحديد بنية 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 في السلسلة التالية.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_spatial_discovery_boundsقبل استخدام XrSpatialBoundsBoxfANDROID - يجب أن يكون
typeXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
spaceاسم معرِّف صالحًا على XrSpace
يتم تحديد بنية 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 في السلسلة التالية.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_spatial_discovery_boundsقبل استخدام XrSpatialBoundsFrustumfANDROID - يجب أن يكون
typeXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
spaceاسم معرِّف صالحًا على XrSpace
مثال
يوضّح الرمز التالي كيفية استخدام الحدود المكانية لفلترة عملية اكتشاف الكيانات المكانية.
// 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_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONتوسيع XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
توسيع XrStructureType :
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
المشاكل
لماذا يعتمد دعم الحدود المكانية على تعريف XrSpatialCapabilityFeatureEXT؟
- تم الحلّ
- الإجابة: لا يمكن لكل ميزة مكانية أن تتيح الحدود المكانية. ومن الأمثلة على ذلك كيان حاوية عالمي افتراضي ليس له أي موضع مكاني أو حدود خاصة به ولكنه يساعد فقط في جمع وتنظيم الكيانات الأخرى بداخله. تساعد قيم XrSpatialCapabilityFeatureEXT التي تم تعدادها حسب الإمكانية في إعلام التطبيق بإمكانية فلترة الحدود المكانية.
سجلّ الإصدارات
المراجعة 1، بتاريخ 03/05/2025 (نيهان جاين، Google)
- الوصف الأولي للإضافة