XR_ANDROID_scene_meshing

নাম স্ট্রিং

XR_ANDROID_scene_meshing

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

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

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

৭১৯

সংশোধন

অনুমোদনের অবস্থা

অনুমোদিত নয়

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

ওপেনএক্সআর ১.০

সর্বশেষ সংশোধনের তারিখ

২০২৫-০৫-১৫

আইপি স্ট্যাটাস

কোনো জ্ঞাত আইপি দাবি নেই।

অবদানকারীরা

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

সংক্ষিপ্ত বিবরণ

এই এক্সটেনশনটির উদ্দেশ্য হলো ব্যবহারকারীর পরিবেশে থাকা ভৌত বস্তুগুলোকে আনুমানিকভাবে উপস্থাপন করে এমন মেশ প্রদান করা।

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

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

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

অনুমতি

অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ম্যানিফেস্টে অবশ্যই 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 এনুমারেশনটি সিন মেশিং-এর জন্য সিমান্টিক লেবেল সেটগুলো বর্ণনা করে। এই এনামের প্রতিটি ভ্যালু অন্য একটি এনামকে প্রতিনিধিত্ব করে, যেটিতে সিমান্টিক লেবেলগুলো থাকে। উদাহরণস্বরূপ, 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;

গণনা মানগুলোর নিম্নলিখিত অর্থ রয়েছে:

এনামের বিবরণ

XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID

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

XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID

এই শব্দার্থিক লেবেল সেটটি XrSceneMeshSemanticLabelANDROID-কে প্রতিনিধিত্ব করে।

xrEnumerateSupportedSemanticLabelSetsANDROID ফাংশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

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

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

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

অ্যাপ্লিকেশনটি 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 এবং এর অধীনস্থ রিসোর্সসমূহকে মুক্ত করে দেয়।

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

  • xrDestroySceneMeshingTrackerANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে।
  • tracker অবশ্যই একটি বৈধ XrSceneMeshingTrackerANDROID হ্যান্ডেল হতে হবে।

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

  • 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 স্ট্রাকচারের মধ্যে মোড়ানো XrSceneMeshSnapshotANDROID হ্যান্ডেল এবং XrSceneMeshTrackingStateANDROID রিটার্ন করে। হ্যান্ডেলটি প্রযুক্তিগতভাবে তৈরির সময়কার সিন মেশ ডেটার একটি স্ন্যাপশট। এই হ্যান্ডেলটি যথাক্রমে xrGetAllSubmeshStatesANDROID এবং xrGetSubmeshDataANDROID ব্যবহার করে সিন মেশের তথ্য ও ডেটা কোয়েরি করার জন্য ব্যবহার করা যেতে পারে

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

  • xrCreateSceneMeshSnapshotANDROID কল করার আগে XR_ANDROID_scene_meshing এক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে।
  • tracker অবশ্যই একটি বৈধ XrSceneMeshingTrackerANDROID হ্যান্ডেল হতে হবে।
  • createInfo অবশ্যই একটি বৈধ XrSceneMeshSnapshotCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে।
  • outSnapshotCreationResult অবশ্যই একটি XrSceneMeshSnapshotCreationResultANDROID স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার হতে হবে।

রিটার্ন কোড

সাফল্য

  • 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 এনুমারেশনটি একটি সিন মেশিং ট্র্যাকারের ট্র্যাকিং অবস্থা বর্ণনা করে। এই এনামের প্রতিটি মান সিন মেশিং ট্র্যাকারের একটি অবস্থাকে নির্দেশ করে।

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;

গণনা মানগুলোর নিম্নলিখিত অর্থ রয়েছে:

এনামের বিবরণ

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 এর ধারণক্ষমতা, অথবা প্রয়োজনীয় ধারণক্ষমতা পেতে ০ দিন।
  • submeshStateCountOutput হলো লিখিত submeshStates সংখ্যার একটি পয়েন্টার, অথবা submeshStateCapacityInput অপর্যাপ্ত হলে প্রয়োজনীয় ধারণক্ষমতার একটি পয়েন্টার।
  • submeshStates হলো XrSceneSubmeshStateANDROID স্ট্রাকচারগুলোর একটি অ্যারের পয়েন্টার, যেখানে রানটাইম সিন মেশের সমস্ত সাবমেশের অবস্থা আউটপুট করবে। submeshStateCapacityInput মান 0 হলে এটি NULL হতে পারে
  • প্রয়োজনীয় submeshStates সাইজ নির্ধারণের বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটারস (Buffer Size Parameters) অধ্যায়টি দেখুন।

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

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

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

xrGetSubmeshDataANDROID ফাংশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

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

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

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

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

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

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

  • 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 এনুমারেশনটি হলো সিমান্টিক লেবেলের ডিফল্ট সেট, যা মেশ ভার্টেক্সগুলোকে লেবেল করতে ব্যবহার করা যায় । এর মাধ্যমে বর্ণনা করা হয় যে, মেশ ভার্টেক্সটি কোন ভৌত পরিবেশের তলের উপর অবস্থিত। এই এনুম সেটটি 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;

এনামগুলোর নিম্নলিখিত অর্থ রয়েছে:

এনামের বিবরণ

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));

নতুন অবজেক্টের প্রকারভেদ

নতুন কমান্ড

নতুন কাঠামো

নতুন এনাম

নতুন এনাম ধ্রুবক

  • 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

সমস্যা

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

  • সংশোধন ৩, ২০২৫-০৫-১৫ (সালার খান)

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