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 :: componentTypes এ XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID যোগ করতে হবে এবং XrSpatialComponentDataQueryResultEXT- এর পরবর্তী পয়েন্টার চেইনে XrSpatialComponentObjectSemanticLabelListANDROID যোগ করতে হবে।
যদি XrSpatialComponentDataQueryResultEXT :: next এর পরবর্তী চেইনে XrSpatialComponentObjectSemanticLabelListANDROID থাকে, কিন্তু XrSpatialComponentDataQueryConditionEXT :: componentTypes এ XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
যদি semanticLabelCount XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput থেকে কম হয়, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতে হবে ।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentObjectSemanticLabelListANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_object_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
semanticLabelsঅবশ্যইsemanticLabelCountসংখ্যক XrSpatialObjectSemanticLabelANDROID মানের একটি অ্যারের পয়েন্টার হতে হবে। -
semanticLabelCountপ্যারামিটারটি অবশ্যই0অপেক্ষা বড় হতে হবে।
কনফিগারেশন
যদি কোনো ক্যাপাবিলিটির জন্য XrSpatialCapabilityComponentTypesEXT :: componentTypes এ XR_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
// ...
}
নতুন কাঠামো
- XrSpatialCapabilityConfigurationObjectTrackingANDROID
XrSpatialComponentDataQueryResultEXT- এর সম্প্রসারণ:
নতুন এনাম
নতুন এনাম ধ্রুবক
-
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
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন ১, ২৬-০৬-২০২৫ (কাইল চেন)
- প্রাথমিক সম্প্রসারণের বিবরণ।
সংশোধন ২, ২০২৫-১২-০৪ (কাইল চেন)
- উদাহরণ ফরম্যাটটি নতুন শৈলীতে হালনাগাদ করুন।