XR_EXT_spatial_plane_tracking
নামের স্ট্রিং
XR_EXT_spatial_plane_tracking
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
742
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_EXT_spatial_entity
কন্ট্রিবিউটর
নিহভ জৈন, Google
নাটালি ফ্লুরি, Meta
ইউইচি তাগুচি, Meta
রন বেসেমস, Meta
ইন লি, Microsoft
জিমি আলমপারাম্বিল, ByteDance
ঝিপেং লিউ, ByteDance
জুন ইয়ান, ByteDance
এক নজরে
এই এক্সটেনশন XR_EXT_spatial_entity-এর উপর ভিত্তি করে তৈরি করা হয়েছে এবং স্পেশিয়াল এন্টিটি ফ্রেমওয়ার্কের জন্য প্লেন ট্র্যাকিং স্পেশিয়াল ক্ষমতাকে সংজ্ঞায়িত করে।
রানটাইম সংক্রান্ত সহায়তা
রানটাইম প্লেন ট্র্যাকিং সাপোর্ট করলে, এটি অবশ্যই xrEnumerateSpatialCapabilitiesEXT-এ XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT গণনা করে এটি নির্দেশ করবে।
কনফিগারেশন
XrSpatialCapabilityConfigurationPlaneTrackingEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialCapabilityConfigurationPlaneTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationPlaneTrackingEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।capabilityহল একটি XrSpatialCapabilityEXT এবং অবশ্যইXR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXTহতে হবে।enabledComponentCountহল একটিuint32_tযাenabledComponentsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।enabledComponentsহল XrSpatialComponentTypeEXT-এর অ্যারের একটি পয়েন্টার।
অ্যাপ্লিকেশন XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ XrSpatialCapabilityConfigurationPlaneTrackingEXT স্ট্রাকচারে একটি পয়েন্টার অন্তর্ভুক্ত করে XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT স্পেশিয়াল ক্ষমতা চালু করতে পারে।
capability যদি XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT না হয়, তাহলে রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationPlaneTrackingEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
capabilityঅবশ্যই একটি সঠিক XrSpatialCapabilityEXT ভ্যালু হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountটি সঠিক XrSpatialComponentTypeEXT মানের অ্যারের পয়েন্টার হতে হবে -
enabledComponentCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
গ্যারেন্টিযুক্ত কম্পোনেন্ট
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT-কে সাপোর্ট করে এমন রানটাইমকে অবশ্যই নিম্নলিখিত স্পেশিয়াল কম্পোনেন্ট প্রদান করতে হবে, যা এই ক্ষমতার মাধ্যমে খুঁজে পাওয়া সব এন্টিটির গ্যারেন্টিযুক্ত কম্পোনেন্ট হিসেবে কাজ করবে এবং অবশ্যই সেগুলিকে xrEnumerateSpatialCapabilityComponentTypesEXT-এ তালিকাভুক্ত করতে হবে :
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTXR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
বাউন্ডেড 2D কম্পোনেন্ট
বাউন্ডেড 2D কম্পোনেন্ট, এন্টিটি দ্বারা উপস্থাপিত সমতলের কেন্দ্র এবং সীমা প্রদান করে। আরও বিবরণের জন্য বাউন্ডেড 2D দেখুন।
প্লেন অ্যালাইনমেন্ট কম্পোনেন্ট
কম্পোনেন্ট ডেটা
typedef enum XrSpatialPlaneAlignmentEXT {
XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_UPWARD_EXT = 0,
XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_DOWNWARD_EXT = 1,
XR_SPATIAL_PLANE_ALIGNMENT_VERTICAL_EXT = 2,
XR_SPATIAL_PLANE_ALIGNMENT_ARBITRARY_EXT = 3,
XR_SPATIAL_PLANE_ALIGNMENT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialPlaneAlignmentEXT;
XrSpatialPlaneAlignmentEXT এনিউমারেশন XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT কম্পোনেন্ট সহ স্পেশিয়াল এন্টিটির সাথে যুক্ত প্লেনের অ্যালাইনমেন্ট বর্ণনা করে।
গুনতির ভ্যালুর অর্থ হল:
Enum-এর বিবরণ
XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_UPWARD_EXT
এন্টিটি অনুভূমিক এবং উপরের দিকে মুখ করে আছে (যেমন, মেঝে)।
XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_DOWNWARD_EXT
এন্টিটি অনুভূমিক এবং নিচের দিকে মুখ করে আছে (যেমন, সিলিং)।
XR_SPATIAL_PLANE_ALIGNMENT_VERTICAL_EXT
এন্টিটিটি উল্লম্ব (যেমন, দেওয়াল)।
XR_SPATIAL_PLANE_ALIGNMENT_ARBITRARY_EXT
এন্টিটির একটি ইচ্ছামত, উল্লম্ব নয় এবং অনুভূমিক নয় এমন ওরিয়েন্টেশন আছে।
ডেটা কোয়েরি করার জন্য কম্পোনেন্ট তালিকার স্ট্রাকচার
XrSpatialComponentPlaneAlignmentListEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialComponentPlaneAlignmentListEXT {
XrStructureType type;
void* next;
uint32_t planeAlignmentCount;
XrSpatialPlaneAlignmentEXT* planeAlignments;
} XrSpatialComponentPlaneAlignmentListEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।planeAlignmentCountহল একটিuint32_tযাplaneAlignmentsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।planeAlignmentsহল XrSpatialPlaneAlignmentEXT-এর একটি অ্যারে।
XrSpatialSnapshotEXT -এ স্পেশিয়াল এন্টিটির প্লেন অ্যালাইনমেন্ট কম্পোনেন্ট কোয়েরি করতে, XrSpatialComponentDataQueryConditionEXT :: componentTypes -এ XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT অন্তর্ভুক্ত করুন এবং XrSpatialComponentDataQueryResultEXT :: next চেনে XrSpatialComponentPlaneAlignmentListEXT যোগ করুন।
XrSpatialComponentPlaneAlignmentListEXT যদি XrSpatialComponentDataQueryResultEXT :: next চেনে থাকে কিন্তু XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT যদি XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
planeAlignmentCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentPlaneAlignmentListEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
planeAlignmentsঅবশ্যইplaneAlignmentCountXrSpatialPlaneAlignmentEXT মানের অ্যারের একটি পয়েন্টার হতে হবে -
planeAlignmentCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কনফিগারেশন
যদি XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এ গণনা অন্তর্ভুক্ত করে, যা এই কম্পোনেন্টকে সমর্থন করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত কাঠামোর তালিকা।
XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
ঐচ্ছিক কম্পোনেন্ট
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT-কে সাপোর্ট করে এমন রানটাইম গ্যারেন্টিযুক্ত কম্পোনেন্ট বিভাগে তালিকাভুক্ত কম্পোনেন্ট ছাড়াও অন্যান্য স্পেশিয়াল কম্পোনেন্টকে সাপোর্ট করতে পারে। রানটাইম সাপোর্ট করে এমন কম্পোনেন্টের সম্পূর্ণ তালিকা পেতে, কোনও অ্যাপ্লিকেশন xrEnumerateSpatialCapabilityComponentTypesEXT ব্যবহার করে, তারপর স্পেশিয়াল কনটেক্সট তৈরি করার সময় এটি যে কম্পোনেন্টগুলি ব্যবহার করতে চায় সেগুলি কনফিগার করে।
মেশ 2D কম্পোনেন্ট
কম্পোনেন্ট ডেটা
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT তার ডেটার জন্য XrSpatialMeshDataEXT স্ট্রাকচার ব্যবহার করে।
ডেটা কোয়েরি করার জন্য কম্পোনেন্ট তালিকার স্ট্রাকচার
XrSpatialComponentMesh2DListEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialComponentMesh2DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh2DListEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।meshCountহল একটিuint32_tযাmeshesঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।meshesহল XrSpatialMeshDataEXT-এর একটি অ্যারে।
XrSpatialSnapshotEXT-এ স্পেশিয়াল এন্টিটির মেশ 2D কম্পোনেন্ট কোয়েরি করতে, XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT অন্তর্ভুক্ত করুন এবং XrSpatialComponentDataQueryResultEXT :: next চেনে XrSpatialComponentMesh2DListEXT যোগ করুন।
XrSpatialComponentMesh2DListEXT যদি XrSpatialComponentDataQueryResultEXT :: next চেনে থাকে কিন্তু XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT যদি XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
meshCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
meshes অ্যারেতে রানটাইম দ্বারা পপুলেট করা XrSpatialMeshDataEXT-এর জন্য, XrSpatialMeshDataEXT :: vertexBuffer-এর জন্য XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT হতেই হবে এবং XrSpatialMeshDataEXT :: indexBuffer-এর জন্য XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT16_EXT হতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentMesh2DListEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
meshesঅবশ্যইmeshCountXrSpatialMeshDataEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
meshCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কনফিগারেশন
যদি XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এ গণনা অন্তর্ভুক্ত করে, যা এই কম্পোনেন্টকে সমর্থন করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত কাঠামোর তালিকা।
XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
Polygon 2D কম্পোনেন্ট
কম্পোনেন্ট ডেটা
XrSpatialPolygon2DDataEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialPolygon2DDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
} XrSpatialPolygon2DDataEXT;
মেম্বারদের বিবরণ
originহল একটি XrPosef যা বহুভুজের উৎপত্তি নির্ধারণ করে। X-Y প্লেনে এই অরিজিনের সাপেক্ষে বহুভুজের সব শীর্ষবিন্দু আছে।vertexBufferহল একটি XrSpatialBufferEXT যাXR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXTধরনের বাফারের জন্য আইডি প্রদান করে এবং এই কম্পোনেন্টটি যে এন্টিটির উপর রয়েছে তার ভার্টেক্স বাফারকে দেখায়। শীর্ষবিন্দুগুলি অবশ্যই ঘড়ির কাঁটার বিপরীত ক্রমে ফেরত দিতে হবে। এইসব শীর্ষবিন্দু দ্বারা উপস্থাপিত বহুভুজ অবশ্যই স্ব-ছেদকারী হবে না এবং হয়ত অবতল হবে।
XrSpatialBufferEXT :: bufferType-এর জন্য vertexBuffer অবশ্যই XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT হতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialPolygon2DDataEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
vertexBufferঅবশ্যই একটি সঠিক XrSpatialBufferEXT স্ট্রাকচার হতে হবে
ডেটা কোয়েরি করার জন্য কম্পোনেন্ট তালিকার স্ট্রাকচার
XrSpatialComponentPolygon2DListEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialComponentPolygon2DListEXT {
XrStructureType type;
void* next;
uint32_t polygonCount;
XrSpatialPolygon2DDataEXT* polygons;
} XrSpatialComponentPolygon2DListEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।polygonCountহল একটিuint32_tযাpolygonsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।polygonsহল XrSpatialPolygon2DDataEXT-এর একটি অ্যারে।
XrSpatialSnapshotEXT -এ স্পেশিয়াল এন্টিটির পলিগন 2D কম্পোনেন্ট কোয়েরি করতে, XrSpatialComponentDataQueryConditionEXT :: componentTypes -এ XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT অন্তর্ভুক্ত করুন এবং XrSpatialComponentDataQueryResultEXT :: next চেনে XrSpatialComponentPolygon2DListEXT যোগ করুন।
XrSpatialComponentPolygon2DListEXT যদি XrSpatialComponentDataQueryResultEXT :: next চেনে থাকে কিন্তু XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT যদি XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
polygonCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentPolygon2DListEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
polygonsঅবশ্যইpolygonCountXrSpatialPolygon2DDataEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
polygonCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কনফিগারেশন
যদি XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এ গণনা অন্তর্ভুক্ত করে, যা এই কম্পোনেন্টকে সমর্থন করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত কাঠামোর তালিকা।
XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
প্লেন সেম্যান্টিক লেবেল
কম্পোনেন্ট ডেটা
typedef enum XrSpatialPlaneSemanticLabelEXT {
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT = 2,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT = 3,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT = 4,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialPlaneSemanticLabelEXT;
XrSpatialPlaneSemanticLabelEXT এনুমারেশন প্লেনের জন্য সিম্যান্টিক লেবেলের একটি সেট বর্ণনা করে।
Enum-এর বিবরণ
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
রানটাইম এই এন্টিটি শ্রেণীবদ্ধ করতে পারেনি।
XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
এন্টিটি হল একটি ফ্লোর।
XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
সত্তাটি হল একটি দেওয়াল।
XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
এন্টিটি হল সর্বোচ্চ সীমা।
XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
এন্টিটি হল একটি টেবিল।
কোয়েরি ডেটার জন্য কম্পোনেন্ট তালিকার স্ট্রাকচার
XrSpatialComponentPlaneSemanticLabelListEXT স্ট্রাকচারটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialComponentPlaneSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialPlaneSemanticLabelEXT* semanticLabels;
} XrSpatialComponentPlaneSemanticLabelListEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।semanticLabelCountহল একটিuint32_tযাsemanticLabelsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।semanticLabelsহল XrSpatialPlaneSemanticLabelEXT-এর একটি অ্যারে।
XrSpatialSnapshotEXT-এ স্পেশিয়াল এন্টিটির প্লেন সিম্যান্টিক লেবেল কম্পোনেন্ট কোয়েরি করতে, XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT অন্তর্ভুক্ত করুন এবং XrSpatialComponentDataQueryResultEXT :: next চেনে XrSpatialComponentPlaneSemanticLabelListEXT যোগ করুন।
XrSpatialComponentPlaneSemanticLabelListEXT যদি XrSpatialComponentDataQueryResultEXT :: next-এর পরবর্তী চেনে থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে :: XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT কিন্তু XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত নয়।
semanticLabelCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentPlaneSemanticLabelListEXT ব্যবহার করার আগে
XR_EXT_spatial_plane_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
semanticLabelsঅবশ্যইsemanticLabelCountXrSpatialPlaneSemanticLabelEXT মানের অ্যারের পয়েন্টার হতে হবে -
semanticLabelCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কনফিগারেশন
যদি XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এ গণনা অন্তর্ভুক্ত করে, যা এই কম্পোনেন্টকে সমর্থন করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত কাঠামোর তালিকা।
XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
কোডের উদাহরণ
প্লেন ট্র্যাকিং ক্ষমতা কনফিগার করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় যে কীভাবে একটি স্থানিক প্রসঙ্গ তৈরি করার সময় প্লেন ট্র্যাকিং ক্ষমতা কনফিগার করতে হয়।
// Check if plane tracking capability is supported
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_PLANE_TRACKING_EXT) == capabilities.end()) {
return;
}
// Enumerate supported components for plane tracking capability
XrSpatialCapabilityComponentTypesEXT planeComponents{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.componentTypeCapacityInput = planeCapabilityComponents.size();
planeComponents.componentTypes = planeCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &planeComponents));
// Check if polygon 2D and plane semantic labels optional components are supported
const auto supportsComponent = [&planeCapabilityComponents](XrSpatialComponentTypeEXT component) {
return std::find(planeCapabilityComponents.begin(), planeCapabilityComponents.end(), component) != planeCapabilityComponents.end();
};
const bool supportsPolygon2DComponent = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT);
const bool supportsSemanticLabelComponent = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT);
// Create a spatial context
XrSpatialContextEXT spatialContext{};
// Enable the 2 guaranteed components of the plane tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};
// Optionally enable polygon2D if it is supported
if (supportsPolygon2DComponent) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT);
}
// Optionally enable semantic labels if it is supported
if (supportsSemanticLabelComponent) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT);
}
XrSpatialCapabilityConfigurationPlaneTrackingEXT planeConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT};
planeConfig.capability = XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT;
planeConfig.enabledComponentCount = enabledComponents.size();
planeConfig.enabledComponents = enabledComponents.data();
std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&planeConfig),
};
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{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_PLANE_TRACKING_EXT-এর মাধ্যমে কনফিগার করা কনটেক্সটের জন্য কীভাবে স্পেশিয়াল এন্টিটি খুঁজে বের করতে হয় এবং এর কম্পোনেন্ট ডেটা কোয়েরি করতে হয় তা নিম্নলিখিত উদাহরণ কোডে দেখানো হয়েছে।
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_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};
if (supportsPolygon2DComponent) {
snapshotComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT);
}
if (supportsSemanticLabelComponent) {
snapshotComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT);
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{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{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = snapshotComponents.size();
queryCond.componentTypes = snapshotComponents.data();
XrSpatialComponentDataQueryResultEXT queryResult{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{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
bounded2DList.boundCount = bounded2D.size();
bounded2DList.bounds = bounded2D.data();
queryResult.next = &bounded2DList;
std::vector<XrSpatialPolygon2DDataEXT> polygons;
XrSpatialComponentPolygon2DListEXT polygonList{XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT};
if (supportsPolygon2DComponent) {
polygons.resize(queryResult.entityIdCountOutput);
polygonList.polygonCount = polygons.size();
polygonList.polygons = polygons.data();
polygonList.next = queryResult.next;
queryResult.next = &polygonList;
}
std::vector<XrSpatialPlaneSemanticLabelEXT> semanticLabels;
XrSpatialComponentPlaneSemanticLabelListEXT semanticLabelsList{XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT};
if (supportsSemanticLabelComponent) {
semanticLabels.resize(queryResult.entityIdCountOutput);
semanticLabelsList.semanticLabelCount = semanticLabels.size();
semanticLabelsList.semanticLabels = semanticLabels.data();
semanticLabelsList.next = queryResult.next;
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;
}
// 2D bounds for entity entityIds[i] is bounded2D[i].extents centered on bounded2D[i].center.
if (supportsPolygon2DComponent) {
// 2D polygon for entity entityIds[i] is the buffer represented by polygons[i].bufferId.
// Application uses flink:xrGetSpatialBufferVector2fEXT to get the buffer data.
}
if (supportsSemanticLabelComponent) {
// 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 = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case 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
// ...
}
নতুন স্ট্রাকচার
- XrSpatialCapabilityConfigurationPlaneTrackingEXT
- XrSpatialPolygon2DDataEXT
XrSpatialComponentDataQueryResultEXT এক্সটেন্ড করা হচ্ছে :
নতুন Enum
নতুন Enum কনস্ট্যান্ট
XR_EXT_SPATIAL_PLANE_TRACKING_EXTENSION_NAMEXR_EXT_spatial_plane_tracking_SPEC_VERSIONXrSpatialCapabilityEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
XrSpatialComponentTypeEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXTXR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXTXR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
XrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT
ইস্যু
ভার্সনের ইতিহাস
রিভিশন ১, ০২-০৭-২০২৪ (নিহভ জৈন, Google)
- প্রাথমিক এক্সটেনশনের বিবরণ