XR_ANDROID_spatial_entity_bound_anchor
নাম স্ট্রিং
XR_ANDROID_spatial_entity_bound_anchor
এক্সটেনশন টাইপ
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
৭৯১
সংশোধন
২
অনুমোদনের অবস্থা
অনুমোদিত নয়
এক্সটেনশন এবং সংস্করণ নির্ভরতা
XR_EXT_spatial_anchor
সর্বশেষ সংশোধনের তারিখ
২০২৫-০৮-১৮
আইপি স্ট্যাটাস
কোনো জ্ঞাত আইপি দাবি নেই।
অবদানকারীরা
ইউশেং চ্যাং, গুগল
কাইল চেন, গুগল
নিহাব জৈন, গুগল
লেভানা চেন, গুগল
স্পেন্সার কুইন, গুগল
সংক্ষিপ্ত বিবরণ
এই এক্সটেনশনটি অ্যাপ্লিকেশনগুলিকে স্থানিক সত্তাগুলিতে অ্যাঙ্কর তৈরি এবং সংযুক্ত করার সুযোগ দেয়, যেগুলিকে এই এক্সটেনশনে 'সত্তা-আবদ্ধ অ্যাঙ্কর' বলা হয়।
একটি এনটিটি-বাউন্ড অ্যাঙ্করকে এমন একটি স্পেশিয়াল এনটিটি হিসাবে উপস্থাপন করা হয় যার মধ্যে XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT এবং XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT কম্পোনেন্ট থাকে। XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT কম্পোনেন্টটি সেই প্যারেন্ট এনটিটির XrSpatialEntityIdEXT সংরক্ষণ করে, যার সাথে অ্যাঙ্করটি সংযুক্ত থাকে।
একটি এনটিটি-বাউন্ড অ্যাঙ্করের পোজ সর্বদা তার প্যারেন্ট এনটিটি থেকে একটি নির্দিষ্ট অফসেট দ্বারা উপস্থাপিত হয়, যাকে অ্যাঙ্করটির "ভিত্তি" হিসাবে বিবেচনা করা হয়। উদাহরণস্বরূপ, কল্পনা করুন একজন ব্যবহারকারীর একটি দেয়ালে সংযুক্ত ভার্চুয়াল ছবির ফ্রেম রয়েছে, ব্যবহারকারী ভার্চুয়াল ছবির ফ্রেমটিকে উপস্থাপন করার জন্য একটি এনটিটি-বাউন্ড অ্যাঙ্কর ব্যবহার করেন এবং এটিকে দেয়াল এনটিটির সাথে সংযুক্ত করেন। এর ফলে, বাস্তব দেয়ালের ট্র্যাকিং অনুমান যতই উন্নত হোক না কেন, দেয়াল এবং ছবির ফ্রেমের মধ্যে আপেক্ষিক অবস্থান সর্বদা সামঞ্জস্যপূর্ণ থাকে।
রানটাইম সাপোর্ট
একটি রানটাইমকে অবশ্যই অন্তত একটি স্পেশিয়াল ট্র্যাকিং এক্সটেনশন সমর্থন করতে হবে, যেমন XR_EXT_spatial_plane_tracking । যদি রানটাইমটি স্পেশিয়াল এনটিটি বাউন্ড অ্যাঙ্কর সমর্থন করে, তবে এটিকে অবশ্যই xrEnumerateSpatialAnchorAttachableComponentsANDROID ফাংশনটি ব্যবহার করে অন্তত একটি অ্যাটাচেবল কম্পোনেন্ট প্রদান করতে হবে। অ্যাপ্লিকেশনটি xrEnumerateSpatialAnchorAttachableComponentsANDROID ব্যবহার করে অ্যাটাচেবল কম্পোনেন্টগুলো গণনা করতে পারে ।
xrEnumerateSpatialAnchorAttachableComponentsANDROID ফাংশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
XrResult xrEnumerateSpatialAnchorAttachableComponentsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t attachableComponentCapacityInput,
uint32_t* attachableComponentCountOutput,
XrSpatialComponentTypeEXT* attachableComponents);
প্যারামিটার বিবরণ
-
instanceহলো একটি XrInstance- এর হ্যান্ডেল। -
systemIdহলো সেইXrSystemIdযার স্থানিক স্থায়িত্ব ভান্ডারগুলো গণনা করা হবে। -
attachableComponentCapacityInputহলোattachableComponentsঅ্যারের ধারণক্ষমতা, অথবা প্রয়োজনীয় ধারণক্ষমতা পুনরুদ্ধারের অনুরোধ বোঝাতে এর মান ০ হবে। -
attachableComponentCountOutputহলো সংযুক্ত করার যোগ্য কম্পোনেন্টের সংখ্যা, অথবাattachableComponentCapacityInputঅপর্যাপ্ত হলে প্রয়োজনীয় ধারণক্ষমতা। -
attachableComponentsহলো XrSpatialComponentTypeEXT- এর একটি অ্যারে। যদিattachableComponentCapacityInputমান 0 হয়, তবে এটিNULLহতে পারে । - প্রয়োজনীয়
attachableComponentsসাইজ নির্ধারণের বিস্তারিত বিবরণের জন্য Buffer Size Parameters অধ্যায়টি দেখুন।
ইনস্ট্যান্সটির জীবনকাল জুড়ে রানটাইমকে অবশ্যই প্রদত্ত systemId এর জন্য এই এনুমারেশন থেকে অভিন্ন বাফার কন্টেন্ট ফেরত দিতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- xrEnumerateSpatialAnchorAttachableComponentsANDROID কল করার আগে
XR_ANDROID_spatial_entity_bound_anchorএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
instanceঅবশ্যই একটি বৈধ XrInstance হ্যান্ডেল হতে হবে -
attachableComponentCountOutputঅবশ্যই একটিuint32_tমানের পয়েন্টার হতে হবে। - যদি
attachableComponentCapacityInput0না হয়, তাহলেattachableComponentsঅবশ্যইattachableComponentCapacityInputXrSpatialComponentTypeEXT মানগুলোর একটি অ্যারের পয়েন্টার হতে হবে।
রিটার্ন কোড
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_VALIDATION_FAILURE
একটি স্থানিক সত্তা-আবদ্ধ অ্যাঙ্কর তৈরি করা
অ্যাপ্লিকেশনগুলো একটি অ্যাঙ্কর তৈরি করতে xrCreateSpatialAnchorEXT ফাংশনটি ব্যবহার করে। যদি কোনো অ্যাপ্লিকেশন একটি স্পেশিয়াল এনটিটির সাথে সংযুক্ত একটি এনটিটি-বাউন্ড অ্যাঙ্কর তৈরি করতে চায়, তবে xrCreateSpatialAnchorEXT ফাংশনটি কল করার সময় এটি XrSpatialAnchorCreateInfoEXT স্ট্রাকচারের নেক্সট পয়েন্টারের সাথে একটি XrSpatialAnchorParentANDROID স্ট্রাকচার চেইন করতে পারে ।
XrSpatialAnchorParentANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialAnchorParentANDROID {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT parentId;
} XrSpatialAnchorParentANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
parentIdহলো সেই এনটিটিরXrSpatialEntityIdEXT, যার সাথে অ্যাঙ্করটি সংযুক্ত করা হবে।
রানটাইমকে অবশ্যই নিশ্চিত করতে হবে যে প্যারেন্ট এনটিটি এবং অ্যাঙ্করের মধ্যে দূরত্ব সর্বদা সামঞ্জস্যপূর্ণ থাকে, যেখানে এই দূরত্বটি হলো প্যারেন্ট এনটিটির নিকটতম পৃষ্ঠের নর্মাল বরাবর অ্যাঙ্করের পোজ। প্যারেন্ট এনটিটির কতগুলো সংযুক্তযোগ্য কম্পোনেন্ট আছে তা নির্বিশেষে, অ্যাঙ্করের পোজটি প্যারেন্ট এনটিটির অবস্থান এবং এর পৃষ্ঠের দূরত্বের উপর ভিত্তি করে আপডেট করা হয়।
যদি XrSpatialAnchorParentANDROID ::parentId, xrCreateSpatialAnchorEXT :: spatialContext এর জন্য একটি বৈধ আইডি না হয়, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialAnchorEXT থেকে XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT রিটার্ন করতে হবে।
যদি xrEnumerateSpatialAnchorAttachableComponentsANDROID দ্বারা তালিকাভুক্ত কোনো কম্পোনেন্টই প্যারেন্ট এনটিটিতে না থাকে, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialAnchorEXT থেকে XR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROID রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialAnchorParentANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_entity_bound_anchorএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
উদাহরণ কোড
স্থানিক সত্তা-আবদ্ধ অ্যাঙ্কর তৈরি করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে একটি এনটিটি-বাউন্ড অ্যাঙ্কর তৈরি করতে হয় এবং এটিকে একটি স্পেশিয়াল প্লেন ট্র্যাকিং এনটিটির সাথে সংযুক্ত করতে হয়।
XrFutureEXT future {XR_NULL_FUTURE_EXT};
std::vector<XrSpatialEntityEXT> entityBoundAnchorEntities;
// We want to look for entities that have the plane tracking components.
std::vector<XrSpatialComponentTypeEXT> snapshotComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};
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) {
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<XrSpatialBounded2DDataEXT> bounded2D(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT bounded2DList{
.type = XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT,
.boundCount = static_cast<uint32_t>(bounded2D.size()),
.bounds = bounded2D.data(),
};
queryResult.next = &bounded2DList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
entityBoundAnchorEntities.reserve(queryResult.entityIdCountOutput);
// Create anchors attached to the plane entities
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] != XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
continue;
}
// Parent ID info the chained to spatial anchor create info next
XrSpatialAnchorParentANDROID parentIdCreateInfo{
.type = XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID,
.parentId = entityIds[i],
};
// spatial anchor create info
XrSpatialAnchorCreateInfoEXT createInfo{
.type = XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT,
// assign Parent ID to anchor create info next, and the pose to the bounded2D center
.next = &parentIdCreateInfo,
.baseSpace = localSpace,
.time = time,
.pose = bounded2D[i].center,
};
XrSpatialEntityIdEXT entityBoundAnchorEntityId {XR_NULL_SPATIAL_ENTITY_ID_EXT};
XrSpatialEntityEXT entityBoundAnchorEntity {XR_NULL_HANDLE};
CHK_XR(xrCreateSpatialAnchorEXT(spatialContext, &createInfo, &entityBoundAnchorEntityId, &entityBoundAnchorEntity));
entityBoundAnchorEntities.push_back(entityBoundAnchorEntity);
}
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);
break;
}
}
// ...
// Finish frame loop
// ...
}
এনটিটি-বাউন্ড অ্যাঙ্কর পোজ এবং প্যারেন্ট এনটিটি আইডি পান
নিম্নলিখিত উদাহরণ কোডটিতে দেখানো হয়েছে কিভাবে একটি এনটিটি-বাউন্ড অ্যাঙ্করের পোজ এবং তার প্যারেন্ট এনটিটির আইডি পাওয়া যায়।
std::vector<XrSpatialEntityEXT> entities;
auto updateEntityBoundAnchorInfo = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to get updated data for all components of the entities, so skip specifying componentTypes.
XrSpatialUpdateSnapshotCreateInfoEXT snapshotCreateInfo{
.type = XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT,
.entityCount = static_cast<uint32_t>(entities.size()),
.entities = entities.data(),
.baseSpace = localSpace,
.time = time,
};
XrSpatialSnapshotEXT snapshot {XR_NULL_HANDLE};
CHK_XR(xrCreateSpatialUpdateSnapshotEXT(spatialContext, &snapshotCreateInfo, &snapshot));
// Query for the entities that have the anchor component and parent component on them.
std::array<XrSpatialComponentTypeEXT, 2> componentsToQuery {XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT, XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT};
XrSpatialComponentDataQueryConditionEXT queryCond{
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT,
.componentTypeCount = componentsToQuery.size(),
.componentTypes = componentsToQuery.data(),
};
XrSpatialComponentDataQueryResultEXT queryResult{
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
};
CHK_XR(xrQuerySpatialComponentDataEXT(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();
// query for the pose data
std::vector<XrPosef> locations(queryResult.entityIdCountOutput);
XrSpatialComponentAnchorListEXT locationList{
.type = XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT,
.locationCount = static_cast<uint32_t>(locations.size()),
.locations = locations.data(),
};
queryResult.next = &locationList;
// query for the parent entity ID data
std::vector<XrSpatialEntityIdEXT> parentIds(queryResult.entityIdCountOutput);
XrSpatialComponentParentListEXT parentList{
.type = XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT,
.parentCount = static_cast<uint32_t>(parentIds.size()),
.parents = parentIds.data(),
};
queryResult.next = &parentList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// Pose for entity entityIds[i] is locations[i].
// Parent entity ID for entity entityIds[i] is parentIds[i].
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(snapshot));
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
updateEntityBoundAnchorInfo(spatialContext, time);
// ...
// Finish frame loop
// ...
}
সংযুক্তযোগ্য উপাদানগুলি গণনা করুন এবং সত্তা-আবদ্ধ অ্যাঙ্কর ক্ষমতা পরীক্ষা করুন।
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে সংযুক্তযোগ্য উপাদানগুলিকে গণনা করতে হয় এবং রানটাইম এনটিটি বাউন্ড অ্যাঙ্কর ক্ষমতা সমর্থন করে কিনা তা পরীক্ষা করতে হয়।
// Check spatial capability
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()));
// Check if anchor capability is supported
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_ANCHOR_EXT) == capabilities.end()) {
return;
}
// Check if plane tracking capability is supported
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT) == capabilities.end()) {
return;
}
// The supported spatial tracking components
std::vector<XrSpatialComponentTypeEXT> spatialTrackingCapabilityComponents;
// Enumerate supported components for plane tracking capability
XrSpatialCapabilityComponentTypesEXT planeComponents{
.type = XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT,
};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &planeComponents));
std::vector<XrSpatialComponentTypeEXT> planeCapabilityComponents(planeComponents.componentTypeCountOutput);
planeComponents.componentTypes = planeCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &planeComponents));
// Add plane supported components to spatial tracking supported components
spatialTrackingCapabilityComponents.insert(spatialTrackingCapabilityComponents.end(), planeCapabilityComponents.begin(), planeCapabilityComponents.end());
// Enumerate supported attachable components for anchor
uint32_t attachableComponentCount = 0;
CHK_XR(xrEnumerateSpatialAnchorAttachableComponentsANDROID(instance, systemId, 0, &attachableComponentCount, nullptr));
std::vector<XrSpatialComponentTypeEXT> attachableComponents(attachableComponentCount);
CHK_XR(xrEnumerateSpatialAnchorAttachableComponentsANDROID(instance, systemId, attachableComponentCount, &attachableComponentCount, attachableComponents.data()));
// Check if at least one spatial tracking component is supported
const auto supportsComponent = [&spatialTrackingCapabilityComponents](XrSpatialComponentTypeEXT component) {
return std::find(spatialTrackingCapabilityComponents.begin(), spatialTrackingCapabilityComponents.end(), component) != spatialTrackingCapabilityComponents.end();
};
bool atLeastOneComponentSupported = false;
for (int32_t i = 0; i < attachableComponentCount; ++i) {
if(supportsComponent(attachableComponents[i])) {
atLeastOneComponentSupported = true;
break;
}
}
// No spatial tracking component supported for anchor attachment
if(!atLeastOneComponentSupported) return;
// ...
// Create spatial entity anchors and get their latest pose in the frame loop.
// ...
নতুন কমান্ড
নতুন কাঠামো
XrSpatialAnchorCreateInfoEXT- এর সম্প্রসারণ:
নতুন এনাম ধ্রুবক
-
XR_ANDROID_SPATIAL_ENTITY_BOUND_ANCHOR_EXTENSION_NAME -
XR_ANDROID_spatial_entity_bound_anchor_SPEC_VERSION XrResult- এর সম্প্রসারণ:
-
XR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROID
-
XrStructureType সম্প্রসারণ :
-
XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন 1, 2025-08-18 (ইউশেং চ্যাং)
- প্রাথমিক সম্প্রসারণের বিবরণ।
সংশোধন ২, ২০২৫-১২-১৬ (কাইল চেন)
- এপিআই-এর নির্দিষ্ট কিছু আচরণে আরও নির্দেশনামূলক ভাষা যোগ করুন।
- xrEnumerateSpatialAnchorAttachableComponentsANDROID- এর উদাহরণ কোডটি যোগ করুন।