XR_ANDROID_scene_meshing

নামের স্ট্রিং

XR_ANDROID_scene_meshing

এক্সটেনশনের ধরন

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

রেজিস্টার করা এক্সটেনশন নম্বর

719

সংশোধন

3

অনুমোদনের স্ট্যাটাস

অনুমোদিত নয়

এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি

OpenXR 1.0

শেষবার পরিবর্তন করার তারিখ

2025-05-15

IP স্ট্যাটাস

IP সংক্রান্ত কোনও দাবি নেই।

কন্ট্রিবিউটর

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

এক নজরে

এই এক্সটেনশনের উদ্দেশ্য হল এমন মেশ প্রদান করা যা ব্যবহারকারীর পরিবেশে থাকা ফিজিক্যাল অবজেক্টকে আনুমানিক উপস্থাপন করে।

অ্যাপ্লিকেশন এই এক্সটেনশন ব্যবহার করে দৃশ্যটি দেখতে এবং ভার্চুয়াল অবজেক্টগুলিকে সংঘর্ষের মতো শারীরিক অবজেক্টগুলির সাথে ইন্টার‍্যাক্ট করতে দিতে পারে।

রানটাইম দ্বারা সিন মেশ ডেটা জেনারেট করা হয় এবং XrSceneMeshingTrackerANDROID ও XrSceneMeshSnapshotANDROID ব্যবহার করে অ্যাপ্লিকেশনের সাথে শেয়ার করা হয়। অ্যাপ্লিকেশনগুলি xrGetAllSubmeshStatesANDROID থেকে ফেরত আসা XrSceneSubmeshStateANDROID-এর মাধ্যমে দৃশ্য সাবমেশ তথ্যের মানগুলি অ্যাক্সেস করতে পারে। অ্যাপ্লিকেশন xrGetSubmeshDataANDROID থেকে ফেরত আসা XrSceneSubmeshDataANDROID-এর মাধ্যমে সিন সাবমেশ ডেটার ভ্যালু অ্যাক্সেস করতে পারে।

সিন মেশিং ডেটা হল সংবেদনশীল ব্যক্তিগত তথ্য এবং এটি ব্যক্তিগত গোপনীয়তা ও সততার সাথে ঘনিষ্ঠভাবে যুক্ত। সিন মেশিং ডেটা স্টোর বা ট্রান্সফার করে এমন অ্যাপ্লিকেশনকে ব্যবহারকারীর থেকে সক্রিয় ও নির্দিষ্ট সম্মতি নেওয়ার জন্য বিশেষভাবে সাজেস্ট করা হয়।

অনুমতি

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

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

(সুরক্ষা লেভেল: বিপজ্জনক)

সিস্টেমের ক্ষমতা পরীক্ষা করা

XrSystemSceneMeshingPropertiesANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

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

মেম্বারদের বিবরণ

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

xrGetSystemProperties কল করার সময় XrSystemProperties-এর সাথে XrSystemSceneMeshingPropertiesANDROID স্ট্রাকচার চেইন করার মাধ্যমে সিস্টেম সিন মেশিং করতে সক্ষম কিনা তা কোনও অ্যাপ্লিকেশন চেক করতে পারে।

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

রানটাইম supportsSceneMeshing-এর জন্য XR_TRUE রিটার্ন করলে, সিস্টেম সিন মেশিং সাপোর্ট করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

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_DEFAULT2_ANDROID = 1000801000,
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;

গুনতির ভ্যালুর অর্থ হল:

Enum-এর বিবরণ

XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID

এই সিম্যান্টিক লেবেল সেট সিম্যান্টিক লেবেলের অনুপস্থিতি দেখায়।

XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID

এই সিম্যান্টিক লেবেল সেট XrSceneMeshSemanticLabelANDROID-কে দেখায়।

XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT2_ANDROID

এই সিম্যান্টিক লেবেল সেট XrSceneMeshSemanticLabel2ANDROID-কে দেখায়। (XR_ANDROID_scene_meshing_semantic_label2 এক্সটেনশন দ্বারা যোগ করা হয়েছে)

xrEnumerateSupportedSemanticLabelSetsANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

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

প্যারামিটারের বিবরণ

  • instance হল অ্যাপ্লিকেশন দ্বারা তৈরি করা একটি XrInstance।
  • systemId হল একটি XrSystemId যা xrGetSystem থেকে আবার চেষ্টা করা হয়েছে।
  • supportedSemanticLabelSetsInputCapacity হল supportedSemanticLabelSets-এর ক্যাপাসিটি অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনতে 0।
  • supportedSemanticLabelSetsOutputCount হল supportedSemanticLabelSets-এর সংখ্যার একটি পয়েন্টার, অথবা supportedSemanticLabelSetsInputCapacity অপর্যাপ্ত হলে প্রয়োজনীয় ক্ষমতার একটি পয়েন্টার।
  • supportedSemanticLabelSets হল XrSceneMeshSemanticLabelSetANDROID-এর অ্যারের একটি পয়েন্টার। supportedSemanticLabelSetsInputCapacity ০ হলে এটি NULL হতে পারে।
  • প্রয়োজনীয় supportedSemanticLabelSets সাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার অধ্যায় দেখুন।

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

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

সঠিক ব্যবহার (অন্তর্নিহিত)

  • xrEnumerateSupportedSemanticLabelSetsANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশন অবশ্যই চালু করতে হবে
  • instance অবশ্যই একটি সঠিক XrInstance হ্যান্ডেল হতে হবে
  • supportedSemanticLabelSetsOutputCount অবশ্যই uint32_t ভ্যালুর পয়েন্টার হতে হবে
  • supportedSemanticLabelSetsInputCapacity যদি 0 না হয়, তাহলে supportedSemanticLabelSets অবশ্যই supportedSemanticLabelSetsInputCapacity XrSceneMeshSemanticLabelSetANDROID মানের অ্যারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • 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

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

XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)

XrSceneMeshingTrackerANDROID হ্যান্ডেল, সিন মেশিং এবং সংশ্লিষ্ট রিসোর্স ম্যানেজ করার জন্য সিন মেশিং ট্র্যাকারকে দেখায়।

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

xrCreateSceneMeshingTrackerANDROID ফাংশনটি এভাবে সংজ্ঞায়িত করা হয়েছে:

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

প্যারামিটারের বিবরণ

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

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

সিস্টেমে সিন মেশিং কাজ না করলে, রানটাইম অবশ্যই xrCreateSceneMeshingTrackerANDROID থেকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করবে। এই ক্ষেত্রে, xrGetSystemProperties ফাংশন কল করা হলে, রানটাইমকে XrSystemSceneMeshingPropertiesANDROID :: supportsSceneMeshing-এর জন্য XR_FALSE রিটার্ন করতেই হবে, যাতে অ্যাপ্লিকেশনটি সিন মেশিং ট্র্যাকার তৈরি করা এড়াতে পারে।

অ্যাপ্লিকেশনটিকে অবশ্যই শুধুমাত্র সেই সিম্যান্টিক লেবেল সেট ব্যবহার করতে হবে যা সিস্টেমে XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet-এ সমর্থিত, যখন একটি সিন মেশিং ট্র্যাকার তৈরি করা হয়। অ্যাপ্লিকেশনটি যদি কাজ করে না এমন সিন মেশ ভার্টেক্স সিম্যান্টিক লেবেল সেট ব্যবহার করে, তাহলে রানটাইম অবশ্যই xrCreateSceneMeshingTrackerANDROID থেকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করবে।

অ্যাপ্লিকেশনটি xrEnumerateSupportedSemanticLabelSetsANDROID ফাংশনের মাধ্যমে সমর্থিত সিম্যান্টিক লেবেল সেটের তালিকা গণনা করতে পারে।

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

সঠিক ব্যবহার (অন্তর্নিহিত)

  • xrCreateSceneMeshingTrackerANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশন অবশ্যই চালু করতে হবে
  • session অবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে
  • createInfo অবশ্যই একটি সঠিক XrSceneMeshingTrackerCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
  • tracker অবশ্যই XrSceneMeshingTrackerANDROID হ্যান্ডেলের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FEATURE_UNSUPPORTED
  • 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_VALIDATION_FAILURE

XrSceneMeshingTrackerCreateInfoANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

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 যা দৃশ্য মেশ ডেটা পাওয়ার সময় দৃশ্য মেশ বাফারে মেশ ভার্টেক্সের জন্য ভার্টেক্স নরমাল অন্তর্ভুক্ত করা হবে কিনা তা নির্দিষ্ট করতে ব্যবহৃত হয়।

XrSceneMeshingTrackerCreateInfoANDROID স্ট্রাকচারটি XrSceneMeshingTrackerANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

xrDestroySceneMeshingTrackerANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

XrResult xrDestroySceneMeshingTrackerANDROID(
    XrSceneMeshingTrackerANDROID                tracker);

প্যারামিটারের বিবরণ

সিন মেশিং অভিজ্ঞতা শেষ হয়ে গেলে, xrDestroySceneMeshingTrackerANDROID ফাংশনটি tracker এবং অন্তর্নিহিত রিসোর্স রিলিজ করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

থ্রেড নিরাপত্তা

  • tracker এবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

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

XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)

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

এই হ্যান্ডেল ব্যবহার করে xrGetAllSubmeshStatesANDROID এবং xrGetSubmeshDataANDROID-এর মাধ্যমে সাবমেশ সংক্রান্ত তথ্য ও ডেটা ফিরিয়ে আনা যেতে পারে।

xrCreateSceneMeshSnapshotANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

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

প্যারামিটারের বিবরণ

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

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

সঠিক ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

হয়ে গেছে

  • 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_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID

XrSceneMeshSnapshotCreateInfoANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

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

মেম্বারদের বিবরণ

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

XrSceneMeshSnapshotCreateInfoANDROID স্ট্রাকচারটি XrSceneMeshSnapshotANDROID হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে

সঠিক ব্যবহার (অন্তর্নিহিত)

XrSceneMeshSnapshotCreationResultANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

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

মেম্বারদের বিবরণ

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

XrSceneMeshSnapshotCreationResultANDROID স্ট্রাকচার xrCreateSceneMeshSnapshotANDROID থেকে রিটার্ন করা সিন মেশ স্ন্যাপশট তৈরির ফলাফল স্টোর করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

XrSceneMeshTrackingStateANDROID এনিউমারেশন, সিন মেশিং ট্র্যাকারের জন্য ট্র্যাকিং স্টেট বর্ণনা করে। এই enum-এর প্রতিটি ভ্যালু দৃশ্য মেশিং ট্র্যাকারের একটি অবস্থাকে দেখায়।

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;

গুনতির ভ্যালুর অর্থ হল:

Enum-এর বিবরণ

XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID

ট্র্যাকারটি এখনও মেশ ডেটা প্রদান করার জন্য প্রস্তুত নয়।

XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID

ট্র্যাকারটি সক্রিয়ভাবে ট্র্যাক করছে।

XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID

শেষ মেশ আপডেটের পর থেকে ইন্টিগ্রেট করার জন্য ট্র্যাকার সঠিক পরিমাপের জন্য অপেক্ষা করছে।

XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID

ট্র্যাকার একাধিক সাইকেলের জন্য সঠিক পরিমাপ পায়নি এবং সমস্যা সংক্রান্ত স্ট্যাটাসে রয়েছে।

এই স্ট্যাটাসটি শুধুমাত্র অ্যাপ্লিকেশনের অতিরিক্ত তথ্য হিসেবে কাজ করে। অন্য কোনও সোর্স থেকে সমস্যা না হলে, রানটাইমকে অবশ্যই অ্যাপ্লিকেশনকে স্ন্যাপশট তৈরি করা এবং ট্র্যাকারের বর্তমান XrSceneMeshTrackingStateANDROID নির্বিশেষে সেগুলি থেকে ডেটা ফিরিয়ে আনার অনুমতি দেওয়া চালিয়ে যেতে হবে। স্ট্যাটাস XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID না হলে, স্ন্যাপশট আপ-টু-ডেট নাও হতে পারে বা খালি থাকতে পারে।

সিন মেশ স্ন্যাপশট থেকে সিন মেশ ডেটা সংগ্রহ করা হচ্ছে

xrGetAllSubmeshStatesANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

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

প্যারামিটারের বিবরণ

  • snapshot হল একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল যা আগে xrCreateSceneMeshSnapshotANDROID-এর মাধ্যমে তৈরি করা হয়েছে।
  • submeshStateCapacityInput হল submeshStates-এর ক্যাপাসিটি অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনতে 0।
  • submeshStateCountOutput হল submeshStates-এর সংখ্যার একটি পয়েন্টার, অথবা submeshStateCapacityInput অপর্যাপ্ত হলে প্রয়োজনীয় ক্ষমতার একটি পয়েন্টার।
  • submeshStates হল XrSceneSubmeshStateANDROID স্ট্রাকচারের একটি অ্যারের পয়েন্টার, যেখানে রানটাইম সিন মেশের সব সাবমেশের স্ট্যাটাস আউটপুট করবে। submeshStateCapacityInput ০ হলে এটি NULL হতে পারে।
  • প্রয়োজনীয় submeshStates সাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার অধ্যায় দেখুন।

অ্যাপ্লিকেশনটি সিন মেশের সব সাবমেশের অবস্থা জানতে xrGetAllSubmeshStatesANDROID ফাংশন ব্যবহার করতে পারে। এতে প্রাথমিক তথ্য থাকে যার মাধ্যমে অ্যাপ্লিকেশনটি সাবমেশ বেছে নিতে পারে যার জন্য অ্যাপ্লিকেশনটি ডেটা চায়।

সঠিক ব্যবহার (অন্তর্নিহিত)

  • xrGetAllSubmeshStatesANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশন চালু করতেই হবে
  • snapshot অবশ্যই একটি সঠিক XrSceneMeshSnapshotANDROID হ্যান্ডেল হতে হবে
  • submeshStateCountOutput অবশ্যই uint32_t ভ্যালুর পয়েন্টার হতে হবে
  • submeshStateCapacityInput যদি 0 না হয়, তাহলে submeshStates-কে submeshStateCapacityInput XrSceneSubmeshStateANDROID স্ট্রাকচারের অ্যারের পয়েন্টার হতেই হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

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 যা সাবমেশকে ঘিরে থাকা বাউন্ডিং বক্সের ডাইমেনশন বর্ণনা করে। এই বাউন্ডটি বেস স্পেসে সংজ্ঞায়িত করা হয়েছে যা দৃশ্য মেশ হ্যান্ডেল তৈরি করতে ব্যবহৃত হয়েছিল।

রানটাইম, সাবমেশ দ্বারা দখল করা ফিজিক্যাল স্পেসের অঞ্চলের সাথে submeshId ম্যাপ করার জন্য যথাসাধ্য চেষ্টা করে। রানটাইম যেকোনও সময় এই ম্যাপিং হারাতে পারে এবং শনাক্ত করা সাবমেশের যেকোনও সাবসেটে নতুন UUID অ্যাসাইন করতে পারে। বিশেষ করে, পরবর্তী অ্যাপ্লিকেশন ইনস্ট্যান্সে একই মেশের জন্য একই UUID আবার ব্যবহার করার জন্য রানটাইমের প্রয়োজন হয় না।

সঠিক ব্যবহার (অন্তর্নিহিত)

xrGetSubmeshDataANDROID ফাংশনটি এভাবে সংজ্ঞায়িত করা হয়েছে:

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

প্যারামিটারের বিবরণ

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

অ্যাপ্লিকেশনটি xrGetSubmeshDataANDROID ফাংশন ব্যবহার করতে পারে, যাতে সাবমেশের ব্যাচ বা সব সাবমেশ একসাথে পাওয়া যায়। এর জন্য প্রতিটি XrSceneSubmeshDataANDROID :: submeshId-এর সাথে XrSceneSubmeshDataANDROID-এর তালিকা পাস করতে হবে, যা সাবমেশ ফিরিয়ে আনার জন্য সংশ্লিষ্ট আইডিতে সেট করা থাকে।

XrSceneSubmeshDataANDROID :: submeshId অবশ্যই inoutSubmeshData-এর প্রতিটি এলিমেন্টের জন্য অনন্য হতে হবে এবং একই snapshot-এর জন্য xrGetAllSubmeshStatesANDROID দ্বারা পুনরুদ্ধারযোগ্য হতে হবে। সাবমেশ আইডি ভুল হলে অথবা inoutSubmeshData-এ একাধিক এলিমেন্টের একই সাবমেশ আইডি থাকলে, রানটাইম অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করবে।

submeshDataCount-এর ভ্যালু xrGetAllSubmeshStatesANDROID :: submeshStateCountOutput-এর মাধ্যমে রিটার্ন করা ভ্যালুর সমান বা তার থেকে কম হতেই হবে, অন্যথায় রানটাইম XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।

বেছে নেওয়া সব সাবমেশের ভার্টেক্স ও ইন্ডেক্স কাউন্ট কোয়েরি করার জন্য ২-কল ইডিয়মে এটি ব্যবহার করা যেতে পারে।

সঠিক ব্যবহার (অন্তর্নিহিত)

  • xrGetSubmeshDataANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশন অবশ্যই চালু করতে হবে
  • snapshot অবশ্যই একটি সঠিক XrSceneMeshSnapshotANDROID হ্যান্ডেল হতে হবে
  • inoutSubmeshData অবশ্যই submeshDataCount XrSceneSubmeshDataANDROID স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে
  • submeshDataCount প্যারামিটার অবশ্যই 0-এর থেকে বেশি হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

XrSceneSubmeshDataANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

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-এর ক্যাপাসিটি অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনতে 0।
  • vertexCountOutput হল vertexPositions , vertexNormals , এবং vertexSemantics-এর সংখ্যার একটি পয়েন্টার, অথবা vertexCapacityInput অপর্যাপ্ত হলে প্রয়োজনীয় ক্ষমতার একটি পয়েন্টার।
  • vertexPositions হল XrVector3f-এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ভার্টেক্স পজিশন আউটপুট করবে।
  • vertexNormals হল XrVector3f-এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ভার্টেক্স নরমাল আউটপুট করবে। অ্যাপ্লিকেশনটি যদি সাধারণ ট্র্যাকার বন্ধ করে কোনও ট্র্যাকার তৈরি করে, তাহলে এই ফিল্ডটি NULL রাখা যেতে পারে।
  • vertexSemantics হল uint8_t-এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ভার্টেক্স সিম্যান্টিক্স আউটপুট করবে। অ্যাপ্লিকেশনটি XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID সিম্যান্টিক লেবেল সেট সহ ট্র্যাকার তৈরি করলে, এই ফিল্ডটি NULL ছেড়ে দেওয়া যেতে পারে।
  • indexCapacityInput হল indices-এর ক্যাপাসিটি অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনতে 0।
  • indexCountOutput হল indices-এর সংখ্যার একটি পয়েন্টার, অথবা vertexCapacityInput অপর্যাপ্ত হলে প্রয়োজনীয় ক্ষমতার একটি পয়েন্টার।
  • indices হল uint32_t-এর একটি অ্যারে যেখানে রানটাইম সাবমেশের ইন্ডেক্স আউটপুট করবে।
  • প্রয়োজনীয় vertexPositions , vertexNormals , vertexSemantics এবং indices সাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার অধ্যায় দেখুন।

সঠিক ব্যবহার (অন্তর্নিহিত)

  • XrSceneSubmeshDataANDROID ব্যবহার করার আগে XR_ANDROID_scene_meshing এক্সটেনশন চালু করতেই হবে
  • type অবশ্যই XR_TYPE_SCENE_SUBMESH_DATA_ANDROID হতে হবে
  • next অবশ্যই NULL বা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
  • vertexCapacityInput যদি 0 না হয়, তাহলে vertexPositions অবশ্যই vertexCapacityInput XrVector3f স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে
  • vertexCapacityInput যদি 0 না হয়, তাহলে vertexNormals অবশ্যই vertexCapacityInput XrVector3f স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে
  • vertexCapacityInput যদি 0 না হয়, তাহলে vertexSemantics অবশ্যই vertexCapacityInput uint8_t মানের অ্যারের পয়েন্টার হতে হবে
  • indexCapacityInput যদি 0 না হয়, তাহলে indices অবশ্যই indexCapacityInput uint32_t মানের অ্যারের পয়েন্টার হতে হবে

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;

enum-এর অর্থ হল:

Enum-এর বিবরণ

XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID

এই সিম্যান্টিক লেবেল থেকে বোঝা যায় যে সংশ্লিষ্ট মেশ এলিমেন্টটি একটি অজানা অবজেক্টকে উপস্থাপন করে।

XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID

এই সিম্যান্টিক লেবেল থেকে বোঝা যায় যে সংশ্লিষ্ট মেশ এলিমেন্টটি একটি মেঝে।

XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID

এই সিম্যান্টিক লেবেল থেকে বোঝা যায় যে সংশ্লিষ্ট মেশ এলিমেন্টটি সিলিংকে দেখায়।

XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID

এই সিম্যান্টিক লেবেল থেকে বোঝা যায় যে সংশ্লিষ্ট মেশ এলিমেন্টটি একটি দেওয়ালকে বোঝাচ্ছে।

XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID

এই সিম্যান্টিক লেবেল থেকে বোঝা যায় যে সংশ্লিষ্ট মেশ এলিমেন্ট একটি টেবিলকে উপস্থাপন করে।

দৃশ্য মেশ স্ন্যাপশট ধ্বংস করুন

xrDestroySceneMeshSnapshotANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

XrResult xrDestroySceneMeshSnapshotANDROID(
    XrSceneMeshSnapshotANDROID                  snapshot);

প্যারামিটারের বিবরণ

  • snapshot হল একটি XrSceneMeshSnapshotANDROID হ্যান্ডেল যা আগে xrCreateSceneMeshSnapshotANDROID-এর মাধ্যমে তৈরি করা হয়েছে এবং এই ফাংশনের মাধ্যমে তা নষ্ট হয়ে যাবে।

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

সঠিক ব্যবহার (অন্তর্নিহিত)

  • xrDestroySceneMeshSnapshotANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশন অবশ্যই চালু করতে হবে
  • snapshot অবশ্যই একটি সঠিক XrSceneMeshSnapshotANDROID হ্যান্ডেল হতে হবে

থ্রেড নিরাপত্তা

  • snapshot এবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

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

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

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
  uint32_t submeshCount = 0;
  CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
  std::vector<XrSceneSubmeshStateANDROID> states(submeshCount, {
    .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.vertexCapacityInput];
    submesh.vertexNormals = new XrVector3f[submesh.vertexCapacityInput];
    submesh.vertexSemantics = new uint8_t[submesh.vertexCapacityInput];
    submesh.indexCapacityInput = submesh.indexCountOutput;
    submesh.indexCountOutput = 0;
    submesh.indices = new uint32_t[submesh.indexCapacityInput];
  }
  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 =
      new XrSceneMeshSemanticLabelANDROID[data.vertexCountOutput];
    for (uint32_t j = 0; j < data.vertexCountOutput; j++) {
      vertexSemantics[j] =
        static_cast<XrSceneMeshSemanticLabelANDROID>(data.vertexSemantics[j]);
    }
    XrPosef pose = submeshesPoses[i];

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

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

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

CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));

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

নতুন কমান্ড

নতুন স্ট্রাকচার

নতুন Enum

নতুন Enum কনস্ট্যান্ট

  • XR_ANDROID_SCENE_MESHING_EXTENSION_NAME
  • XR_ANDROID_scene_meshing_SPEC_VERSION
  • XrObjectType এক্সটেন্ড করা হচ্ছে :

    • XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
    • XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
  • XrStructureType এক্সটেন্ড করা হচ্ছে :

    • 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_DATA_ANDROID
    • XR_TYPE_SCENE_SUBMESH_STATE_ANDROID
    • XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID

ইস্যু

ভার্সনের ইতিহাস

  • রিভিশন ৩, ১৫-০৫-২০২৫ (সালার খান)

    • প্রাথমিক এক্সটেনশনের বিবরণ