XR_ANDROID_scene_meshing OpenXR এক্সটেনশন

নাম স্ট্রিং XR_ANDROID_scene_meshing

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

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

রিভিশন 3

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

সর্বশেষ সংশোধিত তারিখ 2025-05-15

আইপি স্থিতি কোন পরিচিত আইপি দাবি.

অবদানকারী স্পেন্সার কুইন, গুগল জ্যারেড ফাইন্ডার, গুগল আন্তোনিও ফন্টান, গুগল কেয়ার্ন ওভারটার্ফ, গুগল নিহাভ জৈন, গুগল সালার খান, গুগল সেবাস্টিয়ান ক্লোজ, গুগল জার্গেন স্টর্ম, গুগল ভিনি ডাসিলভা, গুগল রিকার্ডো ক্যাম্পবেল, গুগল

ওভারভিউ

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

দৃশ্য মেশিং ডেটা সংবেদনশীল ব্যক্তিগত তথ্য হতে পারে এবং ব্যক্তিগত গোপনীয়তা এবং অখণ্ডতার সাথে ঘনিষ্ঠভাবে যুক্ত। এটি দৃঢ়ভাবে সুপারিশ করা হয় যে অ্যাপ্লিকেশনগুলি যেগুলি দৃশ্য মেশিং ডেটা সঞ্চয় করে বা স্থানান্তর করে সেগুলি সর্বদা ব্যবহারকারীকে সক্রিয় এবং নির্দিষ্ট গ্রহণযোগ্যতার জন্য অনুরোধ করে৷

অনুমতি

অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির অবশ্যই তাদের ম্যানিফেস্টে তালিকাভুক্ত android.permission.SCENE_UNDERSTANDING_FINE অনুমতি থাকতে হবে৷ android.permission.SCENE_UNDERSTANDING_FINE অনুমতিটিকে একটি সংবেদনশীল অনুমতি হিসাবে বিবেচনা করা হয় কারণ এটি রানটাইমকে ব্যবহারকারীর পরিবেশ অধ্যয়ন করার অনুমতি দেয়।

এই ফাংশনগুলি ব্যবহার করার জন্য অ্যাপ্লিকেশনটিকে রানটাইমে অনুমতির অনুরোধ করতে হবে :

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

সিস্টেমের ক্ষমতা পরিদর্শন করুন

xrGetSystemProperties কল করার সময় একটি অ্যাপ্লিকেশন XrSystemSceneMeshingPropertiesANDROID কাঠামোকে XrSystemProperties- এ চেইন করে সিস্টেমটি দৃশ্য মেশিং করতে সক্ষম কিনা তা পরীক্ষা করতে পারে

XrSystemSceneMeshingPropertiesANDROID

typedef struct XrSystemSceneMeshingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • supportsSceneMeshing হল একটি XrBool32 , যা নির্দেশ করে যে সিস্টেম দৃশ্য মেশিং সমর্থন করে কিনা।

SceneMeshing supportsSceneMeshing করলে XR_FALSE হয়, সিস্টেম দৃশ্য মেশিং সমর্থন করে না। যখন xrCreateSceneMeshingTrackerANDROID- এ কল করা ব্যর্থ হবে তখন অ্যাপ্লিকেশানটির দৃশ্য মেশিং কার্যকারিতা ব্যবহার করা এড়ানো উচিত যখন supportsSceneMeshing XR_FALSE

SceneMeshing supportsSceneMeshing করলে XR_TRUE হয়, সিস্টেম দৃশ্য মেশিং সমর্থন করে।

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

XrSceneMeshSemanticLabelSetANDROID

XrSceneMeshSemanticLabelSetANDROID গণনা দৃশ্য মেশিংয়ের জন্য শব্দার্থিক লেবেল সেটগুলি বর্ণনা করে। এই enum-এর প্রতিটি মান অন্য enum প্রতিনিধিত্ব করে যাতে শব্দার্থিক লেবেল থাকে। উদাহরণস্বরূপ, XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID মান XrSceneMeshSemanticLabelANDROID সেটটিকে উপস্থাপন করে।

typedef enum XrSceneMeshSemanticLabelSetANDROID {
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;

xrEnumerateSupportedSemanticLabelSetsANDROID

অ্যাপ্লিকেশনটি xrEnumerateSupportedSemanticLabelSetsANDROID ফাংশন ব্যবহার করে সিস্টেম দ্বারা সমর্থিত শব্দার্থিক লেবেল সেট পেতে পারে

XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    supportedSemanticLabelSetsInputCapacity,
    uint32_t*                                   supportedSemanticLabelSetsOutputCount,
    XrSceneMeshSemanticLabelSetANDROID*         supportedSemanticLabelSets);

পরামিতি বিবরণ

  • instance হল একটি XrInstance যা অ্যাপ্লিকেশন দ্বারা তৈরি করা হয়েছে।
  • systemId হল একটি XrSystemId হল xrGetSystem থেকে পুনরায় চেষ্টা করা হয়েছে।
  • supportedSemanticLabelSetsInputCapacity হল supportedSemanticLabelSets এর দৈর্ঘ্য।
  • supportedSemanticLabelSetsOutputCount হল supportedSemanticLabelSets অ্যারের শুরু থেকে রানটাইম দ্বারা পরিবর্তিত উপাদানগুলির সংখ্যা৷
  • supportedSemanticLabelSets হল XrSceneMeshSemanticLabelSetANDROID এর একটি অ্যারে যেখানে সমর্থিত শব্দার্থিক লেবেল সেট রানটাইম দ্বারা লেখা হয়।

এটা প্রত্যাশিত যে প্রতিটি সিস্টেম অন্ততপক্ষে XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID সমর্থন করবে কারণ এই enum মানটি কোনো শব্দার্থিক লেবেল সেটের প্রতিনিধিত্ব করে না এবং অ্যাপ্লিকেশনটির ভার্টেক্স শব্দার্থের প্রয়োজন না হলে ব্যবহার করা যেতে পারে

একটি দৃশ্য মেশিং ট্র্যাকার হ্যান্ডেল তৈরি করুন

XrSceneMeshingTrackerANDROID

XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)

XrSceneMeshingTrackerANDROID হ্যান্ডেল দৃশ্য মেশিং এবং সম্পর্কিত সংস্থান পরিচালনার জন্য একটি দৃশ্য মেশিং ট্র্যাকার উপস্থাপন করে।

এই হ্যান্ডেলটি এই এক্সটেনশনে xrCreateSceneMeshSnapshotANDROID ব্যবহার করে একটি দৃশ্য জাল স্ন্যাপশট তৈরি করতে ব্যবহার করা যেতে পারে

xrCreateSceneMeshingTrackerANDROID

একটি অ্যাপ্লিকেশন xrCreateSceneMeshingTrackerANDROID ফাংশন ব্যবহার করে একটি XrSceneMeshingTrackerANDROID হ্যান্ডেল তৈরি করতে পারে

XrResult xrCreateSceneMeshingTrackerANDROID(
    XrSession                                   session,
    const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
    XrSceneMeshingTrackerANDROID*               tracker);

পরামিতি বিবরণ

  • session হল একটি XrSession যেখানে দৃশ্য মেশিং ট্র্যাকার সক্রিয় থাকবে।
  • createInfo হল একটি XrSceneMeshingTrackerCreateInfoANDROID কাঠামোর একটি পয়েন্টার যা তৈরি করা দৃশ্য মেশিং ট্র্যাকার বর্ণনা করতে ব্যবহৃত হয়।
  • tracker হল রিটার্ন করা XrSceneMeshingTrackerANDROID হ্যান্ডেল।

সিস্টেমটি দৃশ্য মেশিং সমর্থন না করলে, xrCreateSceneMeshingTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে। অ্যাপ্লিকেশনটি XrSystemSceneMeshingPropertiesANDROID কাঠামোর সাথে xrGetSystemProperties কল করে সিস্টেম সমর্থনের জন্য পরীক্ষা করতে পারে।

একটি দৃশ্য মেশিং ট্র্যাকার তৈরি করার সময় XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet এ সিস্টেম দ্বারা সমর্থিত শুধুমাত্র শব্দার্থিক লেবেল সেটগুলি ব্যবহার করা যেতে পারেxrEnumerateSupportedSemanticLabelSetsANDROID ফাংশনটি সমর্থিত শব্দার্থিক লেবেল সেটের তালিকা পেতে ব্যবহার করা যেতে পারে

যদি অ্যাপ্লিকেশনটি একটি অসমর্থিত semanticLabelSet অনুরোধ করে, xrCreateSceneMeshingTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED ফেরত দেবে।

xrCreateSceneMeshingTrackerANDROID হ্যান্ডেল দৃশ্য মেশিংয়ের জন্য সমস্ত সংস্থানের মালিক। দৃশ্য মেশিং অভিজ্ঞতার সাথে শেষ হয়ে গেলে, অ্যাপ্লিকেশনটিকে অবশ্যই xrDestroySceneMeshingTrackerANDROID ফাংশনের মাধ্যমে হ্যান্ডেলটি ধ্বংস করতে হবে।

XrSceneMeshingTrackerCreateInfoANDROID

XrSceneMeshingTrackerCreateInfoANDROID কাঠামো একটি XrSceneMeshingTrackerANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।

typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
    XrStructureType                       type;
    const void*                           next;
    XrSceneMeshSemanticLabelSetANDROID    semanticLabelSet;
    XrBool32                              enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • semanticLabelSet হল একটি XrSceneMeshSemanticLabelSetANDROID যা দৃশ্য মেশিংয়ের জন্য ব্যবহৃত শব্দার্থিক লেবেল সেট নির্দিষ্ট করতে ব্যবহৃত হয়। যদি এটি XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID তে সেট করা থাকে, রানটাইম XrSceneSubmeshDataANDROID::vertexSemantics বাফার ক্ষেত্রটিকে উপেক্ষা করবে।
  • enableNormals হল একটি XrBool32 যা দৃশ্য মেশ ডেটা পাওয়ার সময় দৃশ্য মেশ বাফারে মেশ শীর্ষবিন্দুগুলির জন্য শীর্ষবিন্দুর স্বাভাবিকগুলি অন্তর্ভুক্ত করতে হবে কিনা তা নির্দিষ্ট করতে ব্যবহৃত হয়।

xrDestroySceneMeshingTrackerANDROID

xrDestroySceneMeshingTrackerANDROID ফাংশন tracker এবং অন্তর্নিহিত সংস্থানগুলি প্রকাশ করে যখন দৃশ্য মেশিং অভিজ্ঞতার সাথে শেষ হয়।

XrResult xrDestroySceneMeshingTrackerANDROID(
    XrSceneMeshingTrackerANDROID          tracker);

পরামিতি বিবরণ

একটি দৃশ্য জাল স্ন্যাপশট হ্যান্ডেল তৈরি করুন

XrSceneMeshSnapshotANDROID

XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)

XrSceneMeshSnapshotANDROID হ্যান্ডেল একটি দৃশ্য জাল স্ন্যাপশট উপস্থাপন করে। এটি xrCreateSceneMeshSnapshotANDROID ব্যবহার করে তৈরি করা হয়েছে যা মূলত ফাংশন কলের সময় দৃশ্য মেশ ডেটার একটি স্ন্যাপশট দখল করে।

এই হ্যান্ডেলটি xrGetAllSubmeshStatesANDROID এবং xrGetSubmeshDataANDROID ব্যবহার করে সাবমেশ তথ্য এবং ডেটা পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে

XrSceneMeshSnapshotCreateInfoANDROID

XrSceneMeshSnapshotCreateInfoANDROID কাঠামো একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে

typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            baseSpace;
    XrTime             time;
    XrBoxf             boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • baseSpace হল একটি XrSpace যা রেফারেন্স স্পেস বর্ণনা করতে ব্যবহৃত হয় যেখানে দৃশ্যটি সাবমেশ পোজ তথ্য উপস্থাপন করা উচিত
  • time হল XrTime যা সেই সময় বর্ণনা করে যখন দৃশ্য জাল প্রক্রিয়া করা হবে বা প্রদর্শিত হবে।
  • boundingBox হল একটি XrBoxf যা বাউন্ডিং বক্সের বর্ণনা দেয় যার মধ্যে দৃশ্য জাল পেতে হয়।

XrSceneMeshTrackingStateANDROID

XrSceneMeshTrackingStateANDROID গণনা দৃশ্য মেশিং ট্র্যাকারের জন্য ট্র্যাকিং অবস্থা বর্ণনা করে। এই enum এর প্রতিটি মান দৃশ্য মেশিং ট্র্যাকারের একটি অবস্থার প্রতিনিধিত্ব করে। এই enumটি XrSceneMeshSnapshotCreationResultANDROID কাঠামোতে মোড়ানো যা xrCreateSceneMeshSnapshotANDROID থেকে ফিরে এসেছে।

typedef enum XrSceneMeshTrackingStateANDROID {
    XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
    XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
    XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
    XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
    XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;

XrSceneMeshSnapshotCreationResultANDROID

XrSceneMeshSnapshotCreationResultANDROID কাঠামো xrCreateSceneMeshSnapshotANDROID থেকে ফিরে আসা একটি দৃশ্য জাল স্ন্যাপশট তৈরির ফলাফল সঞ্চয় করে। ফলাফলের মধ্যে রয়েছে স্ন্যাপশট হ্যান্ডেল এবং স্ন্যাপশট তৈরির সময় দৃশ্য মেশিং ট্র্যাকারের ট্র্যাকিং অবস্থা।

typedef struct XrSceneMeshSnapshotCreationResultANDROID {
    XrStructureType                  type;
    void*                            next;
    XrSceneMeshSnapshotANDROID       snapshot;
    XrSceneMeshTrackingStateANDROID    trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • snapshot রানটাইম দ্বারা তৈরি একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল।
  • trackingState হল একটি XrSceneMeshTrackingStateANDROID যা স্ন্যাপশট তৈরির সময় দৃশ্য মেশিং ট্র্যাকারের অবস্থা বর্ণনা করে।

xrCreateSceneMeshSnapshotANDROID

অ্যাপ্লিকেশনটি xrCreateSceneMeshSnapshotANDROID ফাংশন ব্যবহার করে দৃশ্য মেশিং ট্র্যাকার থেকে একটি দৃশ্য জাল স্ন্যাপশট তৈরি করতে পারে । এই ফাংশনটি XrSceneMeshSnapshotCreationResultANDROID কাঠামোতে মোড়ানো XrSceneMeshTrackingStateANDROID সহ একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল প্রদান করে হ্যান্ডেলটি প্রযুক্তিগতভাবে তৈরির সময় দৃশ্য জাল ডেটার একটি স্ন্যাপশট। এই হ্যান্ডেলটি যথাক্রমে xrGetAllSubmeshStatesANDROID এবং xrGetSubmeshDataANDROID ব্যবহার করে দৃশ্য জাল তথ্য এবং ডেটা অনুসন্ধান করতে ব্যবহার করা যেতে পারে

XrResult xrCreateSceneMeshSnapshotANDROID(
    XrSceneMeshingTrackerANDROID                tracker,
    const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
    XrSceneMeshSnapshotCreationResultANDROID*   outSnapshotCreationResult);

পরামিতি বিবরণ

  • tracker হল একটি XrSceneMeshingTrackerANDROID হ্যান্ডেল যা আগে xrCreateSceneMeshingTrackerANDROID দিয়ে তৈরি করা হয়েছিল।
  • createInfo হল একটি XrSceneMeshSnapshotCreateInfoANDROID কাঠামোর নির্দেশক যা দৃশ্য জাল স্ন্যাপশট তৈরি করার জন্য প্রয়োজনীয় তথ্য ধারণ করে।
  • outSnapshotCreationResult হল একটি XrSceneMeshSnapshotCreationResultANDROID অবজেক্টের একটি পয়েন্টার যা স্ন্যাপশট তৈরির ফলাফলের সাথে রানটাইম দ্বারা পপুলেট করা হয়।

দৃশ্য জাল স্ন্যাপশট থেকে দৃশ্য জাল তথ্য অর্জন

XrSceneSubmeshStateANDROID

XrSceneSubmeshStateANDROID একটি সাবমেশ বর্ণনা করে। এতে সাবমেশ সম্পর্কে প্রাথমিক তথ্য রয়েছে (আইডি, পোজ, সীমানা, সর্বশেষ আপডেট করা সময়)।

typedef struct XrSceneSubmeshStateANDROID {
    XrStructureType    type;
    void*              next;
    XrUuid             submeshId;
    XrTime             lastUpdatedTime;
    XrPosef            submeshPoseInBaseSpace;
    XrExtent3Df        bounds;
} XrSceneSubmeshStateANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • submeshId হল একটি XrUuid যা সাবমেশকে চিহ্নিত করে।
  • lastUpdatedTime হল একটি XrTime সেই সময়ের প্রতিনিধিত্ব করে যখন সাবমেশ শেষবার আপডেট করা হয়েছিল।
  • submeshPoseInBaseSpace হল একটি XrPosef যা দৃশ্য জাল স্ন্যাপশট তৈরি করতে ব্যবহৃত বেস স্পেসে সাবমেশের ভঙ্গি উপস্থাপন করে। এটিও সাবমেশ বাউন্ডিং বাক্সের কেন্দ্রের ভঙ্গি।
  • bounds হল একটি XrExtent3Df যা সাবমেশকে ঘেরা বাউন্ডিং বাক্সের মাত্রা বর্ণনা করে। এই সীমানা বেস স্পেসে রয়েছে যা দৃশ্য জাল হ্যান্ডেল তৈরি করতে ব্যবহৃত হয়েছিল।

xrGetAllSubmeshStatesANDROID

অ্যাপ্লিকেশানটি xrGetAllSubmeshStatesANDROID ফাংশন ব্যবহার করে দৃশ্য জালের সমস্ত সাবমেশের অবস্থা পেতে পারে৷ এতে অ্যাপ্লিকেশনটিকে সাবমেশ নির্বাচন করার অনুমতি দেওয়ার জন্য প্রাথমিক তথ্য তথ্য রয়েছে যার জন্য অ্যাপ্লিকেশনটি ডেটা চায়৷ এই ফাংশনটি 2-কল ইডিয়মে ব্যবহার করা যেতে পারে

XrResult xrGetAllSubmeshStatesANDROID(
    XrSceneMeshSnapshotANDROID            snapshot,
    uint32_t                              submeshStateCapacityInput,
    uint32_t*                             submeshStateCountOutput,
    XrSceneSubmeshStateANDROID*           submeshStates);

পরামিতি বিবরণ

  • snapshot হল একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল যা আগে xrCreateSceneMeshSnapshotANDROID দিয়ে তৈরি করা হয়েছিল।
  • submeshStateCapacityInput হল submeshStates এর দৈর্ঘ্য।
  • submeshStateCountOutput হল submeshStates উপাদানগুলির সংখ্যা যা অ্যারের শুরু থেকে রানটাইম দ্বারা পরিবর্তিত হয়।
  • submeshStates হল XrSceneSubmeshStateANDROID কাঠামোর একটি অ্যারে যেখানে রানটাইম দৃশ্য জালের সমস্ত সাবমেশের অবস্থা আউটপুট করবে।

XrSceneSubmeshDataANDROID

XrSceneSubmeshDataANDROID সাবমেশ আইডি সহ একটি সাবমেশের জন্য ত্রিভুজ ডেটা রয়েছে৷ এই কাঠামোটি সাবমেশের ডেটা পেতে xrGetSubmeshDataANDROID- এ ব্যবহার করা হয়। অ্যাপ্লিকেশনটিকে অবশ্যই এই কাঠামোর সাবমেশ আইডি এবং বরাদ্দকৃত বাফারগুলিতে বাফার পয়েন্টার সেট করতে হবে যাতে সাবমেশের জন্য ফেরত ডেটা বরাদ্দ করা বাফারগুলিতে জমা করা যায়। অ্যাপ্লিকেশনটি xrGetSubmeshDataANDROID-কে 2-কল শব্দ হিসাবে ব্যবহার করতে পারে যেখানে প্রথম কলের জন্য অ্যাপ্লিকেশনটিকে সাবমেশ আইডি সেট করতে হবে এবং সাবমেশ ডেটার জন্য প্রয়োজনীয় বাফারগুলির আকারগুলি পেতে হবে এবং তারপরে অ্যাপ্লিকেশনটি বাফারগুলি বরাদ্দ করতে পারে এবং দ্বিতীয় কলে ডেটা পেতে পারে৷

typedef struct XrSceneSubmeshDataANDROID {
    XrStructureType    type;
    const void*        next;
    XrUuid             submeshId;
    uint32_t           vertexCapacityInput;
    uint32_t           vertexCountOutput;
    XrVector3f*        vertexPositions;
    XrVector3f*        vertexNormals;
    uint8_t*           vertexSemantics;
    uint32_t           indexCapacityInput;
    uint32_t           indexCountOutput;
    uint32_t*          indices;
} XrSceneSubmeshDataANDROID;

সদস্য বিবরণ

  • type হল এই কাঠামোর XrStructureType
  • next হল NULL বা একটি স্ট্রাকচার চেইনের পরবর্তী কাঠামোর একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো কাঠামো সংজ্ঞায়িত করা হয়নি।
  • submeshId হল একটি XrUuid যা সাবমেশকে চিহ্নিত করে।
  • vertexCapacityInput হল vertexPositions , vertexNormals এবং vertexSemantics এর দৈর্ঘ্য।
  • vertexCountOutput হল vertexPositions , vertexNormals এবং vertexSemantics এর উপাদানের সংখ্যা যা অ্যারের শুরু থেকে রানটাইম দ্বারা পরিবর্তিত হয়েছে।
  • vertexPositions হল XrVector3f এর একটি অ্যারে যেখানে রানটাইম সাবমেশের শীর্ষস্থানীয় অবস্থানগুলিকে আউটপুট করবে।
  • vertexNormals হল XrVector3f এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ভার্টেক্স নরমাল আউটপুট করবে। এই ক্ষেত্রটি NULL ছেড়ে দেওয়া যেতে পারে যদি অ্যাপ্লিকেশনটি নরমাল অক্ষম করে একটি ট্র্যাকার তৈরি করে।
  • vertexSemantics হল uint8_t এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ভার্টেক্স শব্দার্থকে আউটপুট করবে। যদি অ্যাপ্লিকেশনটি XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID শব্দার্থিক লেবেল সেট সহ একটি ট্র্যাকার তৈরি করে তবে এই ক্ষেত্রটি NULL ছেড়ে দেওয়া যেতে পারে
  • indexCapacityInput হল indices দৈর্ঘ্য।
  • indexCountOutput হল indices উপাদানগুলির সংখ্যা যা অ্যারের শুরু থেকে রানটাইম দ্বারা পরিবর্তিত হয়েছে।
  • indices হল uint32_t এর একটি অ্যারে যেখানে রানটাইম সাবমেশের সূচকগুলিকে আউটপুট করবে।

xrGetSubmeshDataANDROID

অ্যাপ্লিকেশনটি সাবমেশের একটি নির্বাচিত তালিকার জন্য ডেটা পেতে xrGetSubmeshDataANDROID ফাংশন ব্যবহার করতে পারে । এই ফাংশনটি 2-কল ইডিয়মে ব্যবহার করা যেতে পারে । প্রথম কলে, অ্যাপ্লিকেশনটিকে অবশ্যই একটি বৈধ সাবমেশ আইডি সেট করতে হবে (যেমন: একই দৃশ্যের মেশ স্ন্যাপশট সহ xrGetAllSubmeshStatesANDROID থেকে পুনরুদ্ধারযোগ্য) এবং সাবমেশ ডেটার জন্য প্রয়োজনীয় বাফারগুলির আকার পেতে সাবমেশের নির্বাচিত তালিকার প্রতিটি উপাদানের জন্য শূন্য ক্ষমতা। দ্বিতীয় কলে, অ্যাপ্লিকেশনটিকে সাবমেশের ডেটা পাওয়ার জন্য বাফারগুলির ক্ষমতা সহ সাবমেশের নির্বাচিত তালিকার প্রতিটি উপাদানের জন্য একটি বরাদ্দকৃত বাফারে বাফার পয়েন্টার সেট করতে হবে

XrResult xrGetSubmeshDataANDROID(
    XrSceneMeshSnapshotANDROID            snapshot,
    uint32_t                              submeshDataCount,
    XrSceneSubmeshDataANDROID*            inoutSubmeshData);

পরামিতি বিবরণ

  • snapshot হল একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল যা আগে xrCreateSceneMeshSnapshotANDROID দিয়ে তৈরি করা হয়েছিল।
  • submeshDataCount হল inoutSubmeshData দৈর্ঘ্য।
  • inoutSubmeshData হল XrSceneSubmeshDataANDROID- এর একটি অ্যারে যেখানে প্রতিটি উপাদান সাবমেশ আইডির উপর ভিত্তি করে রানটাইম দ্বারা মেশ ডেটা দিয়ে পপুলেট করা হবে।

XrSceneMeshSemanticLabelANDROID

XrSceneMeshSemanticLabelANDROID গণনা হল শব্দার্থিক লেবেলের ডিফল্ট সেট যা জাল শীর্ষবিন্দুর কোন ভৌত পরিবেশে জাল শীর্ষবিন্দু রয়েছে তা বর্ণনা করতে ব্যবহার করা যেতে পারে । এই enum সেটটি XrSceneMeshSemanticLabelSetANDROID-XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID মান দ্বারা প্রতিনিধিত্ব করা হয়।

typedef enum XrSceneMeshSemanticLabelANDROID {
    XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
    XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
    XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
    XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
    XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
    XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;

একটি দৃশ্য জাল স্ন্যাপশট ধ্বংস

xrDestroySceneMeshSnapshotANDROID

অ্যাপ্লিকেশানটি xrDestroySceneMeshSnapshotANDROID ফাংশন ব্যবহার করে একটি দৃশ্য জাল স্ন্যাপশট ধ্বংস করতে পারে । একবার হ্যান্ডেলটি ধ্বংস হয়ে গেলে, অ্যাপ্লিকেশনটি আর সাবমেশ তথ্য বা ডেটা পেতে এটি ব্যবহার করতে পারবে না। ট্র্যাকারটি ধ্বংস হয়ে গেলে হ্যান্ডেলটি স্বয়ংক্রিয়ভাবে ধ্বংস হয়ে যায় কারণ ট্র্যাকার হ্যান্ডেলটি দৃশ্য জাল স্ন্যাপশট হ্যান্ডেলের মূল।

XrResult xrDestroySceneMeshSnapshotANDROID(
    XrSceneMeshSnapshotANDROID            snapshot);

পরামিতি বিবরণ

দৃশ্য মেশিং জন্য উদাহরণ কোড

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

XrInstance instance;  // Created at app startup
XrSystemId systemId;  // Received from xrGetSystem() at app startup
XrSession session;    // Created at app startup
XrSpace appPlaySpace; // Created at app startup

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;

// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
  .type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
  .type = XR_TYPE_SYSTEM_PROPERTIES,
  .next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
    // scene meshing is not supported.
    return;
}

uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
  instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
  supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
  instance, systemId, supportedsemanticLabelSetsCount,
  &supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());

XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
              XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
    supportedSemanticLabelSets.end()) {
  semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}

XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
  .type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
  .semanticLabelSet = semanticLabelSet,
  .enableNormals = XR_TRUE
};

XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));

XrSceneMeshSnapshotCreationResultANDROID snapshotResult = {
  .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
  .snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo = {
  .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};

// app update loop
while (true) {
  // ...
  // For every frame in frame loop
  // ...

  XrFrameState frameState; // previously returned from xrWaitFrame
  const XrTime time = frameState.predictedDisplayTime;
  XrBoxf box; // populated with the bounding box of the camera frustum

  // ...

  createInfo.baseSpace = appPlaySpace;
  createInfo.time = time;
  createInfo.boundingBox = box;

  // Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
  // choose the appropriate submeshes for which to get data, allocate the necessary
  // buffer for those submeshes, and then get the data.
  CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));

  // check the tracking state
  if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
    // unrecoverable error. Exit the app.
    if (snapshot != XR_NULL_HANDLE) {
      CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
      snapshot = XR_NULL_HANDLE;
    }
    break;
  } else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
    // The tracker is not tracking. Try again later.
    if (snapshot != XR_NULL_HANDLE) {
      CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
      snapshot = XR_NULL_HANDLE;
    }
    continue;
  }

  // 2-call idiom for getting submesh states
  std::vector<XrSceneSubmeshStateANDROID> states;
  uint32_t submeshCount = 0;
  CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
  states.resize(submeshCount);
  for (XrSceneSubmeshStateANDROID& state : states) {
    state = {.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID};
  }
  CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));

  // To store the poses for the selected submeshes
  std::vector<XrPosef> submeshesPoses;
  submeshesPoses.reserve(submeshCount);

  std::vector<XrSceneSubmeshDataANDROID> submeshes;
  submeshes.reserve(submeshCount);
  // Iterate the states and determine which submeshes the app wants data for
  for (XrSceneSubmeshStateANDROID& state : states) {
    // Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
    // is below a threshold or maybe the bounding box does not intersect with camera view
    // frustum (The submesh will be culled).
    bool needed;
    if (needed) {
      // Add the selected submesh to the submeshes list. Set the capacity
      // zero for now since the size of the buffer will be determined later.
      XrSceneSubmeshDataANDROID submesh = {
        .type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
        .submeshId = state.submeshId,
        .vertexCapacityInput = 0,
        .vertexCountOutput = 0,
        .vertexPositions = nullptr,
        .vertexNormals = nullptr,
        .vertexSemantics = nullptr,
        .indexCapacityInput = 0,
        .indexCountOutput = 0,
        .indices = nullptr,
      };
      submeshes.push_back(submesh);
      submeshesPoses.push_back(state.submeshPoseInBaseSpace);
    }
  }

  // Grab the data for the selected submeshes using the 2-call idiom.
  CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
  for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
    submesh.vertexCapacityInput = submesh.vertexCountOutput;
    submesh.vertexCountOutput = 0;
    submesh.vertexPositions = new XrVector3f[submesh.vertexCountOutput];
    submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
    submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
    submesh.indexCapacityInput = submesh.indexCountOutput;
    submesh.indexCountOutput = 0;
    submesh.indices = new uint32_t[submesh.indexCountOutput];
  }
  CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));

  // Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
  // next iteration app can: create a new one to get latest mesh data
  CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
  snapshot = XR_NULL_HANDLE;

  // Iterate the submeshes and get the vertex positions, vertex normals and
  // vertex semantics data for the selected submeshes
  for (uint32_t i = 0; i < submeshes.size(); i++) {
    XrSceneSubmeshDataANDROID& data = submeshes[i];
    XrVector3f* vertexPositions = data.vertexPositions;
    XrVector3f* vertexNormals = data.vertexNormals;
    XrSceneMeshSemanticLabelANDROID* vertexSemantics =
      reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
    XrPosef pose = submeshesPoses[i];

    // *** Use the data as per needs ***

    // Release the allocated memory for the data buffers when done using
    delete [] data.vertexPositions;
    delete [] data.vertexNormals;
    delete [] data.vertexSemantics;
    delete [] data.indices;
  }

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

CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));

নতুন অবজেক্টের ধরন

নতুন Enum ধ্রুবক

XrObjectType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
  • XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID

XrStructureType গণনা এর সাথে প্রসারিত করা হয়েছে:

  • XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
  • XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
  • XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID
  • XR_TYPE_SCENE_SUBMESH_STATE_ANDROID
  • XR_TYPE_SCENE_SUBMESH_DATA_ANDROID

নতুন Enums

নতুন কাঠামো

নতুন ফাংশন

ইস্যু

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

  • রিভিশন 3, 2025-05-15 (সালার খান) ** প্রাথমিক এক্সটেনশন বর্ণনা

OpenXR™ এবং OpenXR লোগো হল The Khronos Group Inc. এর মালিকানাধীন ট্রেডমার্ক এবং চীন, ইউরোপীয় ইউনিয়ন, জাপান এবং যুক্তরাজ্যে ট্রেডমার্ক হিসেবে নিবন্ধিত।