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 স্ট্রাকচারের প্রথম ঘটনাটি প্রসেস করবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

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 স্ট্রাকচারের শুধুমাত্র প্রথম ঘটনাটি প্রসেস করবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

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 স্ট্রাকচারের প্রথম ঘটনাটি প্রসেস করবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

উদাহরণ

স্পেশিয়াল এন্টিটি খোঁজার সময় ফিল্টার করার জন্য কীভাবে স্পেশিয়াল বাউন্ড ব্যবহার করতে হয় তা নিম্নলিখিত কোড থেকে বোঝা যায়।

// 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));

নতুন স্ট্রাকচার

নতুন Enum কনস্ট্যান্ট

  • 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 মানগুলি স্পেশাল বাউন্ড ফিল্টারিংয়ের জন্য সহায়তা সম্পর্কে অ্যাপটিকে জানাতে সাহায্য করে।

ভার্সনের ইতিহাস

  • রিভিশন ১, ০৩-০৫-২০২৫ (নিহভ জৈন, Google)

    • প্রাথমিক এক্সটেনশনের বিবরণ