XR_ANDROID_spatial_object_tracking

নাম স্ট্রিং

XR_ANDROID_spatial_object_tracking

এক্সটেনশন টাইপ

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

৭৮৬

সংশোধন

অনুমোদনের অবস্থা

অনুমোদিত নয়

এক্সটেনশন এবং সংস্করণ নির্ভরতা

XR_EXT_spatial_entity

সর্বশেষ সংশোধনের তারিখ

২০২৫-০৬-২৫

আইপি স্ট্যাটাস

কোনো জ্ঞাত আইপি দাবি নেই।

অবদানকারীরা

কাইল চেন, গুগল
নিহাব জৈন, গুগল
লেভানা চেন, গুগল
স্পেন্সার কুইন, গুগল

সংক্ষিপ্ত বিবরণ

এই এক্সটেনশনটি XR_EXT_spatial_entity উপর ভিত্তি করে তৈরি এবং এটি অ্যাপ্লিকেশন থেকে কোনো ইনপুট ডেটাসেটের প্রয়োজন ছাড়াই পূর্বনির্ধারিত কিছু ভৌত বস্তুকে ট্র্যাক করার জন্য একটি স্থানিক সক্ষমতা সংজ্ঞায়িত করে। উদাহরণস্বরূপ, সিস্টেমটি পরিবেশে থাকা কীবোর্ড, মাউস এবং অন্যান্য বস্তুকে ট্র্যাক করতে পারে এবং তারপর এই বস্তুগুলোর অবস্থান ও বিস্তৃতি অ্যাপ্লিকেশনকে জানাতে পারে।

অনুমতি

অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ম্যানিফেস্টে অবশ্যই android.permission.SCENE_UNDERSTANDING_COARSE পারমিশনটি তালিকাভুক্ত থাকতে হবে, কারণ এই এক্সটেনশনটি পরিবেশের জ্যামিতির উপর নির্ভর করে। android.permission.SCENE_UNDERSTANDING_COARSE পারমিশনটিকে একটি বিপজ্জনক পারমিশন হিসেবে বিবেচনা করা হয়।

(সুরক্ষার স্তর: বিপজ্জনক)

রানটাইম সাপোর্ট

যদি রানটাইম অবজেক্ট ট্র্যাকিং সমর্থন করে, তবে তাকে অবশ্যই xrEnumerateSpatialCapabilitiesEXT-XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID তালিকাভুক্ত করার মাধ্যমে এটি নির্দেশ করতে হবে।

কনফিগারেশন

XrSpatialCapabilityConfigurationObjectTrackingANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

typedef struct XrSpatialCapabilityConfigurationObjectTrackingANDROID {
    XrStructureType                               type;
    const void*                                   next;
    XrSpatialCapabilityEXT                        capability;
    uint32_t                                      enabledComponentCount;
    const XrSpatialComponentTypeEXT*              enabledComponents;
    uint32_t                                      activeSemanticLabelCount;
    const XrSpatialObjectSemanticLabelANDROID*    activeSemanticLabels;
} XrSpatialCapabilityConfigurationObjectTrackingANDROID;

সদস্যদের বিবরণ

  • type হলো এই স্ট্রাকচারটির XrStructureType
  • next হলো NULL অথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার।
  • capability হলো একটি XrSpatialCapabilityEXT এবং এটি অবশ্যই XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID হতে হবে।
  • enabledComponentCount হলো একটি uint32_t যা enabledComponents অ্যারের উপাদান সংখ্যা নির্দেশ করে। এর মান অবশ্যই ০-এর চেয়ে বড় হতে হবে।
  • enabledComponents হলো XrSpatialComponentTypeEXT- এর একটি অ্যারের পয়েন্টার।
  • activeSemanticLabelCount হলো একটি uint32_t যা activeSemanticLabels অ্যারের উপাদান সংখ্যা নির্দেশ করে। এর মান ০ হতে পারে , যার অর্থ সমস্ত সিমান্টিক লেবেল সক্রিয় আছে, অথবা এটি ০-এর চেয়ে বড় হতে পারে , সেক্ষেত্রে কোন সিমান্টিক লেবেলগুলো সক্রিয় তা নির্ধারণ করতে activeSemanticLabels অ্যারেটি ব্যবহৃত হয়।
  • activeSemanticLabels হলো XrSpatialObjectSemanticLabelANDROID অ্যারের একটি পয়েন্টার, যা ট্র্যাকিং-এ সক্রিয় অবজেক্টগুলোকে নির্দেশ করে। activeSemanticLabelCount এর মান ০ হলে এটি অবশ্যই null হবে। আর activeSemanticLabelCount মান ০-এর বেশি হলে এটি অবশ্যই non-null হবে, যার অর্থ হলো কোন সিমান্টিক লেবেলগুলো সক্রিয় তা নির্ধারণ করতে এটি ব্যবহৃত হয়।

অ্যাপ্লিকেশনগুলি XrSpatialContextCreateInfoEXT :: capabilityConfigs -এ XrSpatialCapabilityConfigurationObjectTrackingANDROID স্ট্রাকচারের একটি পয়েন্টার যোগ করে XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID স্পেশিয়াল ক্যাপাবিলিটি সক্রিয় করতে পারে

যদি capability XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID না হয়, তাহলে রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।

অ্যাপ্লিকেশনগুলো activeSemanticLabels এ তাদের পছন্দের সিমান্টিক লেবেলগুলো নির্দিষ্ট করতে পারে , যেগুলো তারা ট্র্যাক করতে আগ্রহী। যদি activeSemanticLabels এ কোনো সিমান্টিক লেবেল নির্দিষ্ট করা না থাকে এবং activeSemanticLabelCount মান ০ হয়, তবে ডিফল্টরূপে সমস্ত সিমান্টিক লেবেল ট্র্যাক করার জন্য সক্রিয় থাকে।

বৈধ ব্যবহার (অন্তর্নিহিত)

  • XrSpatialCapabilityConfigurationObjectTrackingANDROID ব্যবহার করার আগে XR_ANDROID_spatial_object_tracking এক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে।
  • type অবশ্যই XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID হতে হবে
  • next অবশ্যই NULL অথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
  • capability অবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে
  • enabledComponents অবশ্যই enabledComponentCount সংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে।
  • activeSemanticLabels অবশ্যই activeSemanticLabelCount সংখ্যক বৈধ XrSpatialObjectSemanticLabelANDROID মানের একটি অ্যারের পয়েন্টার হতে হবে।
  • enabledComponentCount প্যারামিটারটি অবশ্যই 0 থেকে বড় হতে হবে।
  • activeSemanticLabelCount প্যারামিটারটি অবশ্যই 0 থেকে বড় হতে হবে।

গ্যারান্টিযুক্ত উপাদান

যে রানটাইম XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID সমর্থন করে, তাকে অবশ্যই এই ক্যাপাবিলিটি দ্বারা আবিষ্কৃত এনটিটিগুলোর নিশ্চিত উপাদান হিসেবে নিম্নলিখিত স্পেশিয়াল উপাদানগুলোকে সমর্থন করতে হবে এবং xrEnumerateSpatialCapabilityComponentTypesEXT- এ সেগুলোকে তালিকাভুক্ত করতে হবে

  • XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
  • XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID একটি সিমান্টিক লেবেল কম্পোনেন্ট ছাড়া অবজেক্ট ট্র্যাকিং ক্ষমতা অর্থহীন। যদিও এই এক্সটেনশনটি রানটাইমগুলোর সমর্থনের জন্য সম্ভাব্য সিমান্টিক লেবেল কম্পোনেন্টগুলোর মধ্যে একটি হিসেবে XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID সংজ্ঞায়িত করে, অন্যান্য এক্সটেনশনগুলো একটি ট্র্যাক করা অবজেক্টকে বর্ণনা করে এমন বিভিন্ন শ্রেণীর সিমান্টিক লেবেল সরবরাহ করার জন্য নতুন কম্পোনেন্ট টাইপ সংজ্ঞায়িত করতে পারে

সীমাবদ্ধ 3D উপাদান

বাউন্ডেড ৩ডি কম্পোনেন্টটি, যে এনটিটির উপর এটি অবস্থিত, সেই এনটিটি দ্বারা প্রতিনিধিত্বকৃত অবজেক্টটির কেন্দ্র এবং বিস্তৃতি প্রদান করে। আরও বিস্তারিত জানতে বাউন্ডেড ৩ডি দেখুন।

অবজেক্ট সিমান্টিক লেবেল কম্পোনেন্ট

উপাদান ডেটা

typedef enum XrSpatialObjectSemanticLabelANDROID {
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_ANDROID = 0,
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_KEYBOARD_ANDROID = 1,
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MOUSE_ANDROID = 2,
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAPTOP_BASE_ANDROID = 3,
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialObjectSemanticLabelANDROID;

XrSpatialObjectSemanticLabelANDROID এনুমারেশনটি একটি অবজেক্টের জন্য এক সেট শব্দার্থিক লেবেল বর্ণনা করে।

এনামের বিবরণ

XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_ANDROID

রানটাইম এই সত্তাটিকে শ্রেণীবদ্ধ করতে পারেনি।

XR_SPATIAL_OBJECT_SEMANTIC_LABEL_KEYBOARD_ANDROID

সত্তাটি হলো একটি কিবোর্ড।

XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MOUSE_ANDROID

সত্তাটি হলো একটি ইঁদুর।

XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAPTOP_BASE_ANDROID

সত্তাটি হলো একটি ল্যাপটপ।

স্থানিক বস্তুর অভিমুখীকরণ

বস্তুগুলোর অভিমুখ নিম্নলিখিত চিত্রে দেখানো হয়েছে (যেখানে xyz = rgb), যা বস্তুগুলোর নীচের কেন্দ্র থেকে উদ্ভূত।

মাউসের ত্রিমাত্রিক অভিমুখটি অবলম্বনকারী তলের ত্রিমাত্রিক অভিমুখের সাথে সারিবদ্ধ থাকে। এর বিস্তৃতি কিবোর্ড ও মাউসকে এবং ল্যাপটপের ভিত্তিটিকে সম্পূর্ণরূপে পরিবেষ্টন করে।

এক্সআর অ্যান্ড্রয়েড স্থানিক বস্তুর অভিমুখীকরণ

চিত্র ৩৪। বস্তুর অভিমুখীকরণের উদাহরণ।

ডেটা কোয়েরি করার জন্য কম্পোনেন্ট লিস্ট স্ট্রাকচার

XrSpatialComponentObjectSemanticLabelListANDROID স্ট্রাকচারটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

typedef struct XrSpatialComponentObjectSemanticLabelListANDROID {
    XrStructureType                         type;
    void*                                   next;
    uint32_t                                semanticLabelCount;
    XrSpatialObjectSemanticLabelANDROID*    semanticLabels;
} XrSpatialComponentObjectSemanticLabelListANDROID;

সদস্যদের বিবরণ

  • type হলো এই স্ট্রাকচারটির XrStructureType
  • next হলো NULL অথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • semanticLabelCount হলো একটি uint32_t যা semanticLabels অ্যারের উপাদান সংখ্যা নির্দেশ করে।
  • semanticLabels হলো XrSpatialObjectSemanticLabelANDROID- এর একটি অ্যারে।

অ্যাপ্লিকেশনটি একটি XrSpatialSnapshotEXT- এর মধ্যে থাকা স্পেশিয়াল এনটিটিগুলোর সিমান্টিক লেবেল কম্পোনেন্ট কোয়েরি করতে পারে, এর জন্য XrSpatialComponentDataQueryConditionEXT :: componentTypesXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID যোগ করতে হবে এবং XrSpatialComponentDataQueryResultEXT- এর পরবর্তী পয়েন্টার চেইনে XrSpatialComponentObjectSemanticLabelListANDROID যোগ করতে হবে।

যদি XrSpatialComponentDataQueryResultEXT :: next এর পরবর্তী চেইনে XrSpatialComponentObjectSemanticLabelListANDROID থাকে, কিন্তু XrSpatialComponentDataQueryConditionEXT :: componentTypesXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।

যদি semanticLabelCount XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput থেকে কম হয়, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতে হবে

বৈধ ব্যবহার (অন্তর্নিহিত)

কনফিগারেশন

যদি কোনো ক্যাপাবিলিটির জন্য XrSpatialCapabilityComponentTypesEXT :: componentTypesXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID এনুমারেট করা থাকে, তাহলে অ্যাপ্লিকেশনটি সেই ক্যাপাবিলিটির XrSpatialCapabilityConfigurationBaseHeaderEXT ডিরাইভড স্ট্রাকচারের XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents লিস্টে এনুমটি অন্তর্ভুক্ত করার মাধ্যমে এটিকে এনাবল করতে পারে , যে ক্যাপাবিলিটিটি এই কম্পোনেন্টটিকে সাপোর্ট করে।

XrSpatialCapabilityConfigurationBaseHeaderEXT- এর পরবর্তী চেইনে এই কম্পোনেন্টটিকে অন্তর্ভুক্ত করার জন্য কোনো বিশেষ কনফিগারেশনের প্রয়োজন হয় না।

উদাহরণ কোড

অবজেক্ট ট্র্যাকিং ক্ষমতা কনফিগার করুন

নিম্নলিখিত উদাহরণ কোডটি দেখায় যে কীভাবে একটি স্পেশিয়াল কনটেক্সট তৈরি করার সময় অবজেক্ট ট্র্যাকিং ক্ষমতা কনফিগার করতে হয়।

// Check if object tracking capability is supported
uint32_t capabilityCount = 0;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));

if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID) == capabilities.end()) {
  return;
}

// Enumerate supported components for object tracking capability
XrSpatialCapabilityComponentTypesEXT objectComponents{
  .type = XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT,
};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID, &objectComponents));
std::vector<XrSpatialComponentTypeEXT> objectCapabilityComponents(objectComponents.componentTypeCountOutput);
objectComponents.componentTypeCapacityInput = objectCapabilityComponents.size();
objectComponents.componentTypes = objectCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID, &objectComponents));

// Create a spatial context
XrSpatialContextEXT spatialContext{XR_NULL_HANDLE};

// Enable the 2 guaranteed components (bounded 3D, semantic label) of the object tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
  XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT,
  XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID,
};

// Specify some semantic labels to be active and tracked
std::vector<XrSpatialObjectSemanticLabelANDROID> activeSemanticLabels =
{
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_KEYBOARD_ANDROID,
    XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MOUSE_ANDROID,
};

XrSpatialCapabilityConfigurationObjectTrackingANDROID objectTrackingConfig{
  .type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID,
  .capability = XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID,
  .enabledComponentCount = static_cast<uint32_t>(enabledComponents.size()),
  .enabledComponents = enabledComponents.data(),
  // Specify the count of active semantic labels and the pointer to the array of
  // active semantic labels.
  // If the `activeSemanticLabelCount` is 0 and `activeSemanticLabels` is NULL,
  // all labels will be set to active by default.
  .activeSemanticLabelCount = static_cast<uint32_t>(activeSemanticLabels.size()),
  .activeSemanticLabels = activeSemanticLabels.data(),
};

std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
  reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&objectTrackingConfig),
};

XrSpatialContextCreateInfoEXT spatialContextCreateInfo{
  .type = XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT,
  .capabilityConfigCount = capabilityConfigs.size(),
  .capabilityConfigs = capabilityConfigs.data(),
};
XrFutureEXT createContextFuture {XR_NULL_FUTURE_EXT};
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));

waitUntilReady(createContextFuture);

XrCreateSpatialContextCompletionEXT completion{
  .type = XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT,
};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
  return;
}

spatialContext = completion.spatialContext;

// ...
// Discover entities with the spatial context
// ...

CHK_XR(xrDestroySpatialContextEXT(spatialContext));

স্থানিক সত্তা আবিষ্কার করুন এবং উপাদান ডেটা কোয়েরি করুন

নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID দিয়ে কনফিগার করা একটি কনটেক্সটের জন্য স্পেশিয়াল এনটিটিগুলি আবিষ্কার করতে হয় এবং এর কম্পোনেন্ট ডেটা কোয়েরি করতে হয়।

XrFutureEXT future = XR_NULL_FUTURE_EXT;

// We want to look for entities that have the following components.
std::vector<XrSpatialComponentTypeEXT> snapshotComponents = {
  XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT,
  XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID,
};

auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
  XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
    .type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
    .componentTypeCount = static_cast<uint32_t>(snapshotComponents.size()),
    .componentTypes = snapshotComponents.data(),
  };
  CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));

  waitUntilReady(future);

  XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{
    .type = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT,
    .baseSpace = localSpace,
    .time = time,
    .future = future,
  };

  XrCreateSpatialDiscoverySnapshotCompletionEXT completion{
    .type = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT,
  };
  CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
  if (completion.futureResult == XR_SUCCESS) {

    // Query for the semantic label component data
    XrSpatialComponentDataQueryConditionEXT queryCond{
      .type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT,
      .componentTypeCount = static_cast<uint32_t>(snapshotComponents.size()),
      .componentTypes = snapshotComponents.data(),
    };

    XrSpatialComponentDataQueryResultEXT queryResult{
      .type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
    };
    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
    std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityIdCountOutput);
    queryResult.entityIdCapacityInput = entityIds.size();
    queryResult.entityIds = entityIds.data();
    queryResult.entityStateCapacityInput = entityStates.size();
    queryResult.entityStates = entityStates.data();

    std::vector<XrBoxf> bounded3D(queryResult.entityIdCountOutput);
    XrSpatialComponentBounded3DListEXT bounded3DList{
      .type = XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT,
      .boundCount = static_cast<uint32_t>(bounded3D.size()),
      .bounds = bounded3D.data(),
    };
    queryResult.next = &bounded3DList;

    std::vector<XrSpatialObjectSemanticLabelANDROID> semanticLabels(queryResult.entityIdCountOutput);
    XrSpatialComponentObjectSemanticLabelListANDROID semanticLabelsList{
      .type = XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID,
      .semanticLabelCount = static_cast<uint32_t>(semanticLabels.size()),
      .semanticLabels = semanticLabels.data(),
    };
    queryResult.next = &semanticLabelsList;

    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
      if (entityStates[i] != XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
        continue;
      }

      // 3D bounds for entity entityIds[i] is bounded3D[i].extents centered on bounded3D[i].center.

      // semantic label for entity entityIds[i] is semanticLabels[i].

    }

    CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
  }
};

while (1) {
  // ...
  // For every frame in frame loop
  // ...

  XrFrameState frameState;  // previously returned from xrWaitFrame
  const XrTime time = frameState.predictedDisplayTime;

  // Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
  XrEventDataBuffer event = {
    .type = XR_TYPE_EVENT_DATA_BUFFER,
  };
  XrResult result = xrPollEvent(instance, &event);
  if (result == XR_SUCCESS) {
    if (event.type == XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT) {
      const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
          *reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
      // Discover spatial entities for the context that we received the "discovery
      // recommended" event for.
      discoverSpatialEntities(eventdata.spatialContext, time);
    }
  }

  // ...
  // Finish frame loop
  // ...
}

নতুন কাঠামো

নতুন এনাম

নতুন এনাম ধ্রুবক

  • XR_ANDROID_SPATIAL_OBJECT_TRACKING_EXTENSION_NAME
  • XR_ANDROID_spatial_object_tracking_SPEC_VERSION
  • XrSpatialCapabilityEXT- এর সম্প্রসারণ:

    • XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
  • XrSpatialComponentTypeEXT এর সম্প্রসারণ:

    • XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
  • XrStructureType সম্প্রসারণ :

    • XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID
    • XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID

সমস্যা

সংস্করণ ইতিহাস

  • সংশোধন ১, ২৬-০৬-২০২৫ (কাইল চেন)

    • প্রাথমিক সম্প্রসারণের বিবরণ।
  • সংশোধন ২, ২০২৫-১২-০৪ (কাইল চেন)

    • উদাহরণ ফরম্যাটটি নতুন শৈলীতে হালনাগাদ করুন।