XR_ANDROID_spatial_discovery_bounds
নামের স্ট্রিং
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 দ্বারা গণনা করা) সাপোর্ট করে এমন স্পেশিয়াল ক্ষমতা, XrSpatialBoundsSpherefANDROID-কে XrSpatialDiscoverySnapshotCreateInfoEXT :: next-এর সাথে চেইন করার মাধ্যমে, অ্যাপ্লিকেশনকে স্পেশিয়াল এন্টিটি খোঁজার প্রসেস সীমাবদ্ধ করার অনুমতি দেয়, যার লোকেশন বা বাউন্ড sphere-এর মধ্যে বা তার সাথে ইন্টারসেক্ট করে। ডিসকভারি স্ন্যাপশটের জন্য, যেখানে প্রযোজ্য ক্ষমতা XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID সমর্থন করে, যদি এই স্ট্রাকচারটি next চেনে উপস্থিত থাকে, তাহলে রানটাইমে অবশ্যই এমন কোনও স্পেশিয়াল এন্টিটি অন্তর্ভুক্ত করা যাবে না যার লোকেশন বা বাউন্ড সম্পূর্ণভাবে sphere-এর বাইরে।
এটি মনে রাখা গুরুত্বপূর্ণ যে XrSpatialDiscoverySnapshotCreateInfoEXT-এর পরবর্তী চেনে XrSpatialBoundsSpherefANDROID অন্তর্ভুক্ত করা হলে, সেটি প্রদত্ত অন্যান্য ফিল্টারের সাথে 'AND' শর্ত হিসেবে কাজ করে। XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID কাজ করে না এমন স্পেশাল ক্ষমতা থেকে আসা এন্টিটি ডিসকভারি স্ন্যাপশটে অন্তর্ভুক্ত করা যাবে না। এই আচরণটি OpenXR স্পেসিফিকেশনের বাকি অংশের থেকে আলাদা যেখানে পরবর্তী পয়েন্টার চেনে অচেনা বা কাজ করে না এমন স্ট্রাকচার রানটাইম দ্বারা উপেক্ষা করা হয়। এছাড়াও, পরবর্তী চেইন স্ট্রাকচারের অনন্যতা বিভাগে যেমন বর্ণনা করা হয়েছে, রানটাইম শুধুমাত্র পরবর্তী চেইনে XrSpatialBoundsSpherefANDROID স্ট্রাকচারের প্রথম ঘটনাটি প্রসেস করবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialBoundsSpherefANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_boundsএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_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 দ্বারা গণনা করা) সাপোর্ট করে এমন স্পেশিয়াল ক্ষমতা, XrSpatialBoundsBoxfANDROID-কে XrSpatialDiscoverySnapshotCreateInfoEXT :: next-এর সাথে চেইন করার মাধ্যমে, অ্যাপ্লিকেশনকে স্পেশিয়াল এন্টিটি খোঁজার বিষয়টি সীমাবদ্ধ করার অনুমতি দেয়, যার লোকেশন বা সীমা box-এর মধ্যে বা তার সাথে ইন্টারসেক্ট করে। ডিসকভারি স্ন্যাপশটের জন্য, যেখানে প্রযোজ্য ক্ষমতা XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID সমর্থন করে, যদি এই স্ট্রাকচারটি next চেনে উপস্থিত থাকে, তাহলে রানটাইমে অবশ্যই এমন কোনও স্পেশিয়াল এন্টিটি অন্তর্ভুক্ত করা যাবে না যার লোকেশন বা বাউন্ড সম্পূর্ণভাবে box-এর বাইরে।
এটি মনে রাখা গুরুত্বপূর্ণ যে XrSpatialDiscoverySnapshotCreateInfoEXT-এর পরবর্তী চেনে XrSpatialBoundsBoxfANDROID অন্তর্ভুক্ত করা হলে, সেটি প্রদত্ত অন্যান্য ফিল্টারের সাথে 'AND' শর্ত হিসেবে কাজ করে। XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID কাজ করে না এমন স্পেশাল ক্ষমতা থেকে আসা এন্টিটি ডিসকভারি স্ন্যাপশটে অন্তর্ভুক্ত করা যাবে না। এই আচরণটি OpenXR স্পেসিফিকেশনের বাকি অংশের থেকে আলাদা যেখানে পরবর্তী পয়েন্টার চেনে অচেনা বা কাজ করে না এমন স্ট্রাকচার রানটাইম দ্বারা উপেক্ষা করা হয়। এছাড়াও, পরবর্তী চেইন স্ট্রাকচারের অনন্যতা বিভাগে যেমন বর্ণনা করা হয়েছে, রানটাইম পরবর্তী চেইনে XrSpatialBoundsBoxfANDROID স্ট্রাকচারের শুধুমাত্র প্রথম ঘটনাটি প্রসেস করবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialBoundsBoxfANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_boundsএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_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 দ্বারা গণনা করা) সাপোর্ট করে এমন স্পেশিয়াল ক্ষমতা, XrSpatialBoundsFrustumfANDROID-কে XrSpatialDiscoverySnapshotCreateInfoEXT :: next-এর সাথে চেইন করার মাধ্যমে, অ্যাপ্লিকেশনকে স্পেশিয়াল এন্টিটি খোঁজার প্রসেস সীমাবদ্ধ করার অনুমতি দেয়, যার লোকেশন বা বাউন্ড frustum-এর মধ্যে বা ইন্টারসেক্ট করে। ডিসকভারি স্ন্যাপশটের জন্য, যেখানে প্রযোজ্য ক্ষমতা XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID সমর্থন করে, যদি এই স্ট্রাকচারটি next চেনে উপস্থিত থাকে, তাহলে রানটাইমে অবশ্যই এমন কোনও স্পেশিয়াল এন্টিটি অন্তর্ভুক্ত করা যাবে না যার লোকেশন বা বাউন্ড সম্পূর্ণভাবে frustum-এর বাইরে।
এটি মনে রাখা গুরুত্বপূর্ণ যে XrSpatialDiscoverySnapshotCreateInfoEXT-এর পরবর্তী চেনে XrSpatialBoundsFrustumfANDROID অন্তর্ভুক্ত করা হলে, সেটি প্রদত্ত অন্যান্য ফিল্টারের সাথে 'AND' শর্ত হিসেবে কাজ করে। XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID কাজ করে না এমন স্পেশাল ক্ষমতা থেকে আসা এন্টিটি ডিসকভারি স্ন্যাপশটে অন্তর্ভুক্ত করা যাবে না। এই আচরণটি OpenXR স্পেসিফিকেশনের বাকি অংশের থেকে আলাদা যেখানে পরবর্তী পয়েন্টার চেনে অচেনা বা কাজ করে না এমন স্ট্রাকচার রানটাইম দ্বারা উপেক্ষা করা হয়। এছাড়াও, পরবর্তী চেইন স্ট্রাকচারের অনন্যতা বিভাগে যেমন বর্ণনা করা হয়েছে, রানটাইম শুধুমাত্র পরবর্তী চেইনে XrSpatialBoundsFrustumfANDROID স্ট্রাকচারের প্রথম ঘটনাটি প্রসেস করবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialBoundsFrustumfANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_boundsএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_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));
নতুন স্ট্রাকচার
XrSpatialDiscoverySnapshotCreateInfoEXT এক্সটেন্ড করা হচ্ছে :
নতুন Enum কনস্ট্যান্ট
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONXrSpatialCapabilityFeatureEXT এক্সটেন্ড করা হচ্ছে :
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 মানগুলি স্পেশাল বাউন্ড ফিল্টারিংয়ের জন্য সহায়তা সম্পর্কে অ্যাপটিকে জানাতে সাহায্য করে।
ভার্সনের ইতিহাস
রিভিশন ১, ০৩-০৫-২০২৫ (নিহভ জৈন, Google)
- প্রাথমিক এক্সটেনশনের বিবরণ