XR_ANDROID_spatial_discovery_raycast
নাম স্ট্রিং
XR_ANDROID_spatial_discovery_raycast
এক্সটেনশন টাইপ
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
৭৮৭
সংশোধন
১
অনুমোদনের অবস্থা
অনুমোদিত নয়
এক্সটেনশন এবং সংস্করণ নির্ভরতা
XR_EXT_spatial_entity
সর্বশেষ সংশোধনের তারিখ
২০২৫-০৮-১২
আইপি স্ট্যাটাস
কোনো জ্ঞাত আইপি দাবি নেই।
অবদানকারীরা
ব্রায়ান চেন, গুগল
লেভানা চেন, গুগল
কাইল চেন, গুগল
নিহাব জৈন, গুগল
স্পেন্সার কুইন, গুগল
নাটালি ফ্লেউরি, মেটা
ইউইচি তাগুচি, মেটা
জিমি আলামপারাম্বিল, বাইটড্যান্স
ঝিপেং লিউ, বাইটড্যান্স
সংক্ষিপ্ত বিবরণ
এই এক্সটেনশনটি XR_EXT_spatial_entity উপর ভিত্তি করে তৈরি এবং এটি XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT এর মতো বিদ্যমান স্পেশিয়াল ক্যাপাবিলিটিগুলোর জন্য স্পেশিয়াল এনটিটি আবিষ্কার করতে রে-কাস্ট কার্যকারিতা প্রদান করে।
এই এক্সটেনশনটি ডেপথ বাফারের বিপরীতে রে-কাস্টিংয়ের জন্য একটি নতুন স্থানিক সক্ষমতাও যোগ করে।
অনুমতি
অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি যে ক্যাপাবিলিটিগুলো ব্যবহার করে, তার উপর নির্ভর করে প্রয়োজনীয় পারমিশন। যদি XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID ব্যবহার করা হয়, তাহলে অ্যাপ্লিকেশনটির অবশ্যই android.permission.SCENE_UNDERSTANDING_FINE পারমিশন থাকতে হবে। যদি XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT ব্যবহার করা হয়, তাহলে অ্যাপ্লিকেশনটির অবশ্যই android.permission.SCENE_UNDERSTANDING_COARSE পারমিশন থাকতে হবে। android.permission.SCENE_UNDERSTANDING_FINE পারমিশনটি android.permission.SCENE_UNDERSTANDING_COARSE পারমিশনটিকেও বোঝায়; যদি অ্যাপ্লিকেশনটি উভয় ক্যাপাবিলিটি ব্যবহার করে, তবে অ্যাপ্লিকেশনটিকে আলাদাভাবে উভয় পারমিশনের জন্য অনুরোধ করার প্রয়োজন নেই।
android.permission.SCENE_UNDERSTANDING_COARSE এবং android.permission.SCENE_UNDERSTANDING_FINE উভয়কেই বিপজ্জনক পারমিশন হিসেবে বিবেচনা করা হয়।
(সুরক্ষার স্তর: বিপজ্জনক)
রানটাইম সাপোর্ট
যদি রানটাইম রে-কাস্টিংয়ের মাধ্যমে স্পেশিয়াল এনটিটি আবিষ্কার সমর্থন করে, তবে তাকে অবশ্যই xrEnumerateSpatialCapabilityComponentTypesEXT- এ XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID তালিকাভুক্ত করে সেই ক্যাপাবিলিটিগুলোর জন্য এটি নির্দেশ করতে হবে যেগুলো রে-কাস্টের মাধ্যমে আবিষ্কার সমর্থন করে।
যদি রানটাইম ডেপথ বাফারের বিপরীতে রে-কাস্টিং সমর্থন করে, তবে এটিকে অবশ্যই xrEnumerateSpatialCapabilitiesEXT- এ XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID গণনা করতে হবে ।
রে-কাস্টিং এর মাধ্যমে স্থানিক সত্তা আবিষ্কার করুন
XrSpatialRaycastInfoANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialRaycastInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrVector3f origin;
XrVector3f direction;
float maxDistance;
} XrSpatialRaycastInfoANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
spaceহলো সেই XrSpace, যার মধ্যে XrSpatialRaycastResultDataANDROID- এর পোজটি অবস্থিত হবে। -
timeহলো একটিXrTime, যে সময়ে XrSpatialRaycastResultDataANDROID- এর পোজটি সংজ্ঞায়িত করা হয়। -
originহলো একটি XrVector3f যা রশ্মিটির উৎস বর্ণনা করে। -
directionহলো একটি XrVector3f যা রশ্মির দিক বর্ণনা করে। -
maxDistanceহলো মিটারে পরিমাপকৃত সেই দূরত্ব, যা অ্যাপ্লিকেশনটি ঐচ্ছিকভাবে নির্দিষ্ট করতে পারে । এর মাধ্যমেoriginথেকে একটি নির্দিষ্টdirectionবরাবর, উক্ত নির্দিষ্ট দূরত্বের মধ্যে থাকা সত্তাগুলোর অনুসন্ধান সীমিত করা হয়।
একটি অ্যাপ্লিকেশন এই স্ট্রাকচারে সংজ্ঞায়িত রে-এর সাথে ছেদকারী স্থানিক সত্তাগুলি আবিষ্কার করতে XrSpatialDiscoverySnapshotCreateInfoEXT :: next চেইনে XrSpatialRaycastInfoANDROID অন্তর্ভুক্ত করতে পারে ।
যদি কোনো অ্যাপ্লিকেশন এমন একটি XrSpatialContextEXT-এর সাথে XrSpatialRaycastInfoANDROID ব্যবহার করে, যা কোনো ক্যাপাবিলিটির জন্য XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID সক্রিয় না করেই কনফিগার করা হয়েছিল, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialDiscoverySnapshotAsyncEXT বা xrCreateSpatialRaycastSnapshotANDROID থেকে XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT রিটার্ন করতে হবে।
রানটাইমে অবশ্যই XrSpatialSnapshotEXT- এর মধ্যে থাকা শুধুমাত্র সেইসব স্পেশিয়াল এনটিটির কম্পোনেন্ট ডেটা এবং আইডি অন্তর্ভুক্ত করতে হবে, যেগুলো XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID কম্পোনেন্টকে সমর্থন করে এমন ক্যাপাবিলিটি থেকে আসে।
যদি কোনো অ্যাপ্লিকেশন maxDistance কে একটি ধনাত্মক মানে সেট করে, তাহলে রানটাইমকে অবশ্যই snappn:origin থেকে direction বরাবর maxDistance চেয়ে বেশি দূরে অবস্থিত কোনো হিট স্পেশাল এনটিটিকে snappn-এ অন্তর্ভুক্ত করা যাবে না। যদি maxDistance 0 বা একটি ঋণাত্মক মানে সেট করা হয়, তাহলে রানটাইমকে অবশ্যই রে-টিকে আনবাউন্ডেড (unbounded) হিসেবে বিবেচনা করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialRaycastInfoANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_RAYCAST_INFO_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
spaceঅবশ্যই একটি বৈধ XrSpace হ্যান্ডেল হতে হবে।
রেকাস্ট ফলাফল উপাদান
XrSpatialRaycastResultDataANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialRaycastResultDataANDROID {
XrPosef hitPose;
float distanceSquared;
} XrSpatialRaycastResultDataANDROID;
সদস্যদের বিবরণ
-
hitPoseহলো একটি XrPosef যা সেই বিন্দুকে সংজ্ঞায়িত করে যেখানে রশ্মিটি স্থানিক সত্তার সাথে ছেদ করে। -
distanceSquaredহলো রশ্মির উৎস থেকে ছেদবিন্দু পর্যন্ত দূরত্বের বর্গ।
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID কম্পোনেন্টটি শুধুমাত্র এমন একটি XrSpatialSnapshotEXT- এ উপস্থিত থাকবে যা xrCreateSpatialDiscoverySnapshotAsyncEXT থেকে তৈরি করা হয়েছে, যেখানে XrSpatialRaycastInfoANDROID-কে XrSpatialDiscoverySnapshotCreateInfoEXT :: next চেইনে অন্তর্ভুক্ত করা হয়েছে, অথবা xrCreateSpatialRaycastSnapshotANDROID থেকে তৈরি করা একটি XrSpatialSnapshotEXT- এ উপস্থিত থাকবে।
xrCreateSpatialUpdateSnapshotEXT ব্যবহার করে তৈরি করা কোনো XrSpatialSnapshotEXT- এ রানটাইম এই কম্পোনেন্টটি অন্তর্ভুক্ত করবে না।
যদি অ্যাপ্লিকেশনটি XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes -এ XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID অন্তর্ভুক্ত করে, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialUpdateSnapshotEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
যদি XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID শুধুমাত্র নির্দিষ্ট কিছু ক্যাপাবিলিটির জন্য সক্রিয় করা থাকে, তাহলে রানটাইমকে অবশ্যই স্ন্যাপশটে শুধুমাত্র সেই ক্যাপাবিলিটিগুলো দ্বারা প্রদত্ত স্পেশিয়াল এনটিটিগুলো অন্তর্ভুক্ত করতে হবে। উদাহরণস্বরূপ, যদি একটি বস্তু এবং একটি প্লেন একই দিকে সারিবদ্ধ হয় এবং XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID শুধুমাত্র XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT এর জন্য সক্রিয় করা থাকে, তাহলে শুধুমাত্র প্লেনটিই আবিষ্কৃত হবে।
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID এর hitPose , XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace এ অবস্থিত হবে। ধনাত্মক Z অক্ষটি হলো হিট সারফেসের নর্মাল, এবং ঋণাত্মক Y অক্ষটি মোটামুটিভাবে রে-এর উৎসের দিকে নির্দেশ করে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialRaycastResultDataANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে।
ডেটা কোয়েরি করার জন্য কম্পোনেন্ট লিস্ট স্ট্রাকচার
XrSpatialComponentRaycastResultListANDROID স্ট্রাকচারটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialComponentRaycastResultListANDROID {
XrStructureType type;
void* next;
uint32_t raycastResultCount;
XrSpatialRaycastResultDataANDROID* raycastResults;
} XrSpatialComponentRaycastResultListANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
raycastResultCountহলো একটিuint32_tযাraycastResultsঅ্যারের উপাদান সংখ্যা নির্দেশ করে। -
raycastResultsহলো XrSpatialRaycastResultDataANDROID- এর একটি অ্যারে।
একটি XrSpatialSnapshotEXT- এর স্পেশিয়াল এনটিটিগুলোর রেকাস্ট রেজাল্ট কম্পোনেন্ট কোয়েরি করতে, XrSpatialComponentDataQueryConditionEXT :: componentTypes এ XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID অন্তর্ভুক্ত করুন এবং XrSpatialComponentDataQueryResultEXT :: next চেইনে XrSpatialComponentRaycastResultListANDROID যোগ করুন।
যদি XrSpatialComponentRaycastResultListANDROID, XrSpatialComponentDataQueryResultEXT :: next chain-এ থাকে কিন্তু XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID XrSpatialComponentDataQueryConditionEXT :: componentTypes এ অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে ।
যদি raycastResultCount মান XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput থেকে কম হয়, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতে হবে ।
ফেরত আসা raycastResults অক্রমবদ্ধ থাকে। কোনো অ্যাপ্লিকেশন দূরত্ব অনুসারে ফলাফলগুলো সাজানোর জন্য XrSpatialRaycastResultDataANDROID :: distanceSquared ব্যবহার করতে পারে ।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentRaycastResultListANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
raycastResultsঅবশ্যইraycastResultCountসংখ্যক XrSpatialRaycastResultDataANDROID স্ট্রাকচারের একটি অ্যারের পয়েন্টার হতে হবে। -
raycastResultCountপ্যারামিটারটি অবশ্যই0এর চেয়ে বড় হতে হবে।
কনফিগারেশন
যদি কোনো ক্যাপাবিলিটির জন্য XrSpatialCapabilityComponentTypesEXT :: componentTypes এ XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID তালিকাভুক্ত থাকে, তাহলে অ্যাপ্লিকেশনটি XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents তালিকায় enum ভ্যালুটি অন্তর্ভুক্ত করার মাধ্যমে এটিকে সক্রিয় করতে পারে । এই কম্পোনেন্টটিকে XrSpatialCapabilityConfigurationBaseHeaderEXT- এর পরবর্তী চেইনে অন্তর্ভুক্ত করার জন্য কোনো বিশেষ কনফিগারেশনের প্রয়োজন হয় না।
যদি অ্যাপ্লিকেশনটি XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes এ XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID অন্তর্ভুক্ত করে, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialUpdateSnapshotEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে। এই কম্পোনেন্টটি ডিসকভারি স্ন্যাপশটের জন্য নির্দিষ্ট।
গভীরতা রশ্মি নিক্ষেপ স্থানিক ক্ষমতা
কনফিগারেশন
XrSpatialCapabilityConfigurationDepthRaycastANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialCapabilityConfigurationDepthRaycastANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationDepthRaycastANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
capabilityহলো একটি XrSpatialCapabilityEXT এবং এটি অবশ্যইXR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROIDহতে হবে। -
enabledComponentCountহলো একটিuint32_tযাenabledComponentsঅ্যারের উপাদান সংখ্যা নির্দেশ করে। এর মান অবশ্যই ০-এর চেয়ে বড় হতে হবে। -
enabledComponentsহলো XrSpatialComponentTypeEXT- এর একটি অ্যারের পয়েন্টার।
অ্যাপ্লিকেশনগুলি XrSpatialContextCreateInfoEXT :: capabilityConfigs -এ একটি XrSpatialCapabilityConfigurationDepthRaycastANDROID স্ট্রাকচারের পয়েন্টার অন্তর্ভুক্ত করার মাধ্যমে XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID স্পেশিয়াল ক্যাপাবিলিটি সক্রিয় করতে পারে ।
যদি capability XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID না হয়, তাহলে রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
এই সক্ষমতার মাধ্যমে আবিষ্কৃত এনটিটিগুলোর আইডি সর্বদা XR_NULL_SPATIAL_ENTITY_ID_EXT হয়। এর মানে হলো, অ্যাপ্লিকেশন এই এনটিটিগুলোর জন্য একটি XrSpatialEntityEXT হ্যান্ডেল তৈরি করতে পারে না, এবং ফলস্বরূপ একটি আপডেট স্ন্যাপশট তৈরি করার জন্য এগুলোকে XrSpatialUpdateSnapshotCreateInfoEXT :: entities অন্তর্ভুক্ত করা যায় না।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationDepthRaycastANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
enabledComponentCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
গ্যারান্টিযুক্ত উপাদান
যে রানটাইম XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID সমর্থন করে, তাকে অবশ্যই এই ক্যাপাবিলিটি দ্বারা আবিষ্কৃত এনটিটিগুলোর নিশ্চিত উপাদান হিসেবে নিম্নলিখিত স্পেশিয়াল উপাদানগুলোকে সমর্থন করতে হবে এবং xrEnumerateSpatialCapabilityComponentTypesEXT- এ সেগুলোকে তালিকাভুক্ত করতে হবে ।
-
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
সিঙ্ক্রোনাস রেকাস্ট
xrCreateSpatialRaycastSnapshotANDROID ফাংশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
XrResult xrCreateSpatialRaycastSnapshotANDROID(
XrSpatialContextEXT spatialContext,
const XrSpatialRaycastSnapshotCreateInfoANDROID* createInfo,
XrSpatialSnapshotEXT* snapshot);
প্যারামিটার বিবরণ
-
spatialContextহলো একটি XrSpatialContextEXT যা পূর্বে xrCreateSpatialContextAsyncEXT ব্যবহার করে তৈরি করা হয়েছে। -
createInfoহলো XrSpatialRaycastSnapshotCreateInfoANDROID- এর একটি পয়েন্টার। -
snapshotহলো XrSpatialSnapshotEXT- এর একটি পয়েন্টার।
যদিও xrCreateSpatialDiscoverySnapshotAsyncEXT বেশিরভাগ ব্যবহারের ক্ষেত্রে যথেষ্ট, তবে যেসব অ্যাপ্লিকেশনের তাৎক্ষণিক রে-কাস্ট ফলাফলের প্রয়োজন হয়, তাদের জন্য এটিকে ধীরগতির বলে মনে করা হয়। xrCreateSpatialRaycastSnapshotANDROID একটি স্ন্যাপশট তৈরি করার জন্য সিনক্রোনাস রে-কাস্টিং শুরু করে, যা অ্যাপ্লিকেশনগুলোকে অবিলম্বে রে-কাস্ট ফলাফল কোয়েরি করা শুরু করার সুযোগ দেয়।
spatialContext তৈরি করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs এ পাঠানো স্পেশাল ক্যাপাবিলিটিগুলোর জন্য XrSpatialRaycastSnapshotCreateInfoANDROID :: componentTypes এ থাকা XrSpatialComponentTypeEXT- গুলোর কোনোটি এনাবল করা না থাকলে, রানটাইমকে অবশ্যই XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT রিটার্ন করতে হবে।
যদি অ্যাপ্লিকেশনটি XrSpatialRaycastSnapshotCreateInfoANDROID :: componentTypes এ স্পেশিয়াল কম্পোনেন্ট টাইপের কোনো তালিকা প্রদান না করে, তাহলে রানটাইমকে অবশ্যই স্ন্যাপশটের মধ্যে সেই সমস্ত স্পেশিয়াল এনটিটি অন্তর্ভুক্ত করতে হবে, যেগুলোর কম্পোনেন্টের সেট spatialContext এর জন্য কনফিগার করা রেকাস্ট সাপোর্টেড ক্যাপাবিলিটিগুলোর জন্য XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents-এ তালিকাভুক্ত আছে। রানটাইমকে অবশ্যই spatialContext এর জন্য কনফিগার করা রেকাস্ট সাপোর্টেড ক্যাপাবিলিটিগুলোর সমস্ত সক্রিয় কম্পোনেন্টের ডেটা অন্তর্ভুক্ত করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialRaycastSnapshotANDROID কল করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
spatialContextঅবশ্যই একটি বৈধ XrSpatialContextEXT হ্যান্ডেল হতে হবে। -
createInfoঅবশ্যই একটি বৈধ XrSpatialRaycastSnapshotCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে। -
snapshotঅবশ্যই একটি XrSpatialSnapshotEXT হ্যান্ডেলের দিকে নির্দেশকারী একটি পয়েন্টার হতে হবে।
রিটার্ন কোড
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT -
XR_ERROR_TIME_INVALID -
XR_ERROR_VALIDATION_FAILURE
XrSpatialRaycastSnapshotCreateInfoANDROID স্ট্রাকচারটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialRaycastSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
const XrSpatialRaycastInfoANDROID* raycastInfo;
} XrSpatialRaycastSnapshotCreateInfoANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো স্ট্রাকচার সংজ্ঞায়িত করা নেই। -
componentTypeCountহলো একটিuint32_tযাcomponentTypesঅ্যারের উপাদান সংখ্যা বর্ণনা করে। -
componentTypesহলো XrSpatialComponentTypeEXT- এর একটি অ্যারে। -
raycastInfoহলো XrSpatialRaycastInfoANDROID স্ট্রাকচার যা একটি রশ্মির তথ্য বর্ণনা করে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialRaycastSnapshotCreateInfoANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_discovery_raycastএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। - যদি
componentTypeCount0না হয়, তাহলেcomponentTypesঅবশ্যইcomponentTypeCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
raycastInfoঅবশ্যই একটি বৈধ XrSpatialRaycastInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে।
উদাহরণ কোড
ডেপথ রে-কাস্ট এবং প্লেন ট্র্যাকিং ক্ষমতা কনফিগার করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে রেকাস্ট কার্যকারিতা সমর্থনকারী ক্যাপাবিলিটি সহ একটি স্পেশিয়াল কনটেক্সট তৈরি করতে হয়। এই উদাহরণের জন্য, XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID এবং XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT ব্যবহার করা হয়েছে।
// Check runtime supported capabilities
uint32_t capabilityCount;
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_DEPTH_RAYCAST_ANDROID) == capabilities.end()) {
return;
}
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT) == capabilities.end()) {
return;
}
// Create capability config for depth raycasting
std::vector<XrSpatialComponentTypeEXT> depthRaycastComponents {
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
};
// Create capability config for depth raycasting
XrSpatialCapabilityConfigurationDepthRaycastANDROID depthRaycastConfig {
.type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID,
.enabledComponentCount = (uint32_t)depthRaycastComponents.size(),
.enabledComponents = depthRaycastComponents.data(),
};
// Enumerate runtime supported components for plane tracking capability
XrSpatialCapabilityComponentTypesEXT capabilityComponentTypes {
XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
};
bool isRaycastSupportedViaPlaneTracking;
std::vector<XrSpatialComponentTypeEXT> planeTrackingComponents {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId,
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &capabilityComponentTypes));
planeTrackingComponents.resize(capabilityComponentTypes.componentTypeCountOutput);
capabilityComponentTypes.componentTypeCapacityInput = (uint32_t)planeTrackingComponents.size();
capabilityComponentTypes.componentTypes = planeTrackingComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId,
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &capabilityComponentTypes));
// Check if raycast is supported by plane tracking
isRaycastSupportedViaPlaneTracking = std::find(planeTrackingComponents.begin(),
planeTrackingComponents.end(), XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID)
!= planeTrackingComponents.end();
// Create capability config for plane tracking
XrSpatialCapabilityConfigurationPlaneTrackingEXT planeTrackingConfig {
.type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT,
.enabledComponentCount = (uint32_t)planeTrackingComponents.size(),
.enabledComponents = planeTrackingComponents.data(),
};
// Create spatial context
// Types of raycast is determined by configs included in XrSpatialContextCreateInfoEXT
// For this example, both plane raycast & depth raycast are performed
std::vector<const XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<const XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&depthRaycastConfig));
if(isRaycastSupportedViaPlaneTracking) capabilityConfigs.push_back(reinterpret_cast<const XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&planeTrackingConfig));
XrSpatialContextCreateInfoEXT contextCreateInfo {
.type = XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT,
.next = nullptr,
.capabilityConfigCount = (uint32_t)capabilityConfigs.size(),
.capabilityConfigs = capabilityConfigs.data(),
};
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &contextCreateInfo, &future))
// Completes creating spatial context
XrCreateSpatialContextCompletionEXT contextCompletion{
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, future, &contextCompletion))
স্থানিক সত্তা আবিষ্কার করুন এবং উপাদান ডেটা কোয়েরি করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID এবং XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT দিয়ে কনফিগার করা একটি কনটেক্সটের জন্য স্পেশিয়াল এনটিটিগুলি আবিষ্কার করতে হয় এবং এর কম্পোনেন্ট ডেটা কোয়েরি করতে হয়।
// Fill in the raycast info.
XrSpatialRaycastInfoANDROID raycastInfo {
.type = XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID,
.next = nullptr,
.space = viewSpace,
.time = updateTime,
.origin = {0.0f, 0.0f, 0.0f},
.direction = {0.0f, 0.0f,-1.0f},
.maxDistance = 0.0f // ray is unbounded
};
// Next pointing to the raycast info.
XrSpatialDiscoverySnapshotCreateInfoEXT discoverySnapshotCreateInfo {
.type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
.next = &raycastInfo
};
// Create snapshot
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT (
spatialContext, &discoverySnapshotCreateInfo, &future));
waitUntilReady(future);
// Complete async operation.
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
createSnapshotCompletionInfo {
.type = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT,
.baseSpace = viewSpace,
.time = updateTime,
.future = future,
};
XrCreateSpatialDiscoverySnapshotCompletionEXT completion {
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(
spatialContext, &createSnapshotCompletionInfo,
&completion));
if(completion.futureResult != XR_SUCCESS) return;
// Query hit result components
std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
};
XrSpatialComponentDataQueryConditionEXT queryCond {
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT,
.componentTypeCount = 1,
.componentTypes = enabledComponents.data(),
};
XrSpatialComponentDataQueryResultEXT queryResult {
.type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
};
XrResult result = xrQuerySpatialComponentDataEXT(
completion.snapshot, &queryCond, &queryResult);
// Check query result.
if(result != XR_SUCCESS) return;
// Query again for the hit result list.
std::vector<XrSpatialRaycastResultDataANDROID> raycastResults;
raycastResults.resize(queryResult.entityIdCountOutput);
XrSpatialComponentRaycastResultListANDROID raycastResultList {
.type = XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID,
.raycastResultCount = (uint32_t)raycastResults.size(),
.raycastResults = raycastResults.data(),
};
queryResult.next = &raycastResultList;
result = xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult);
// Check query result again.
if(result != XR_SUCCESS) return;
std::vector<XrSpatialEntityEXT> hitEntities;
std::vector<XrPosef> depthHitPoses;
for(uint32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// access raycastResults[i] for id & pose
XrSpatialEntityIdEXT id = queryResult.entityIds[i];
XrPosef pose = raycastResults[i].hitPose;
if (id != XR_NULL_SPATIAL_ENTITY_ID_EXT) {
// hit entities (e.g. planes)
// get entity handle via entity id
XrSpatialEntityFromIdCreateInfoEXT entityCreateInfo {
.type = XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT,
.entityId = id,
};
XrSpatialEntityEXT entity = XR_NULL_HANDLE;
xrCreateSpatialEntityFromIdEXT(spatialContext, &entityCreateInfo, &entity);
hitEntities.push_back(entity);
} else {
// hit depth
depthHitPoses.push_back(pose);
}
}
// Cleanup
xrDestroySpatialSnapshotEXT(completion.snapshot);
রেকাস্ট স্ন্যাপশট তৈরি করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে সিঙ্ক্রোনাস রেকাস্ট স্ন্যাপশট তৈরি করতে হয়।
// fill in create info
XrSpatialRaycastSnapshotCreateInfoANDROID createInfo {
.type = XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID,
.componentTypeCount = 0, // include all hit spatial entities
.componentTypes = nullptr,
.raycastInfo = &raycastInfo
};
// create raycast snapshot
XrSpatialSnapshotEXT raycastSnapshot = XR_NULL_HANDLE;
CHK_XR(xrCreateSpatialRaycastSnapshotANDROID(
spatialContext, &createInfo, &raycastSnapshot));
// ...
// query component data as previous example
// ...
// Cleanup
xrDestroySpatialSnapshotEXT(raycastSnapshot);
নতুন কমান্ড
নতুন কাঠামো
- XrSpatialCapabilityConfigurationDepthRaycastANDROID
- XrSpatialRaycastResultDataANDROID
- XrSpatialRaycastSnapshotCreateInfoANDROID
XrSpatialComponentDataQueryResultEXT- এর সম্প্রসারণ:
XrSpatialDiscoverySnapshotCreateInfoEXT- এর সম্প্রসারণ:
নতুন এনাম ধ্রুবক
-
XR_ANDROID_SPATIAL_DISCOVERY_RAYCAST_EXTENSION_NAME -
XR_ANDROID_spatial_discovery_raycast_SPEC_VERSION XrSpatialCapabilityEXT- এর সম্প্রসারণ:
-
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
-
XrSpatialComponentTypeEXT এর সম্প্রসারণ:
-
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
-
XrStructureType সম্প্রসারণ :
-
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID -
XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID -
XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID -
XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন ১, ২০২৫-০৭-১৫ (ব্রায়ান চেন)
- প্রাথমিক সম্প্রসারণের বিবরণ।