XR_ANDROID_geospatial

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

XR_ANDROID_geospatial

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

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

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

790

সংশোধন

1

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

অনুমোদিত নয়

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

XR_EXT_future

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

2025-12-18

IP স্ট্যাটাস

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

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

জন উলম্যান, Google
বেন কিং, Google
নিহাভ জৈন, Google
জ্যারেড ফাইন্ডার, Google

এক নজরে

এই এক্সটেনশন Google-এর জিওস্পেশিয়াল API-এর জন্য জিওস্পেশিয়াল ট্র্যাকিং প্রদান করে, যা সুনির্দিষ্ট জিও-লোকেশন এবং ওরিয়েন্টেশন প্রদান করে এবং অ্যাপ্লিকেশনকে পৃথিবীর সাপেক্ষে কন্টেন্ট প্লেস করার অনুমতি দেয়। এটি মোশন ট্র্যাকিং, জিপিএস ও অন্যান্য সেন্সর এবং Google-এর ভিজ্যুয়াল পজিশনিং সিস্টেম (VPS) একসাথে ব্যবহার করে এই কাজ করে। সুনির্দিষ্ট লোকেশন ও ওরিয়েন্টেশন নির্ধারণ করার জন্য VPS কোনও ডিভাইসের ক্যামেরা থেকে পাওয়া ছবি Street View ছবির সাথে তুলনা করে। Geospatial API প্রায়ই সাব-মিটার পজিশনাল অ্যাকুরেসি (জিপিএস-এর থেকে অনেক বেশি ভালো) এবং সাব-ডিগ্রি ওরিয়েন্টেশন অ্যাকুরেসি প্রদান করে।

এই এক্সটেনশনে API সঠিকভাবে ব্যবহার করতে (এক্সটেনশন সাপোর্ট চেক করা ছাড়া), অ্যাপ্লিকেশনকে XR_ANDROID_google_cloud_auth-এর মতো কোনও মেকানিজমের মাধ্যমে যাচাইকরণ সংক্রান্ত ক্রেডেনশিয়াল সঠিকভাবে সেট করতেই হবে। সেট-আপ ও সমস্যার ফলাফল সম্পর্কে আরও জানতে, অথ এক্সটেনশনের ডকুমেন্টেশন দেখুন।

অনুমতি

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

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

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

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

typedef struct XrSystemGeospatialPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;

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

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

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

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

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

Geospatial Tracker হ্যান্ডেল তৈরি করুন

XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)

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

XrResult xrCreateGeospatialTrackerANDROID(
    XrSession                                   session,
    const XrGeospatialTrackerCreateInfoANDROID* createInfo,
    XrGeospatialTrackerANDROID*                 geospatialTrackerOutput);

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

  • session হল একটি XrSession যেখানে জিওস্পেশিয়াল ট্র্যাকার অ্যাক্টিভ থাকবে।
  • createInfo হল XrGeospatialTrackerCreateInfoANDROID স্ট্রাকচারের একটি পয়েন্টার যা প্রাথমিক জিওস্পেশিয়াল ট্র্যাকার প্যারামিটার নির্দিষ্ট করে।
  • geospatialTrackerOutput হল একটি হ্যান্ডেলের পয়েন্টার যেখানে তৈরি করা XrGeospatialTrackerANDROID ফিরিয়ে দেওয়া হয়।

একটি অ্যাপ্লিকেশন xrCreateGeospatialTrackerANDROID কল করে XrGeospatialTrackerANDROID হ্যান্ডেল তৈরি করতে পারে। ফেরত আসা XrGeospatialTrackerANDROID হ্যান্ডেল পরবর্তীকালে API কলে ব্যবহার করা যেতে পারে। অ্যাপ্লিকেশনটি প্রয়োজনীয় অনুমতি না পেলে, রানটাইম অবশ্যই XR_ERROR_PERMISSION_INSUFFICIENT রিটার্ন করবে। নির্দিষ্ট XrSession-এর জন্য একবারে শুধুমাত্র একটি XrGeospatialTrackerANDROID থাকতে পারে। এই ফাংশন আবার কল করার আগে, অ্যাপ্লিকেশনকে অবশ্যই নিশ্চিত করতে হবে যে আগের যেকোনও XrGeospatialTrackerANDROID অবজেক্ট ধ্বংস করা হয়েছে, অন্যথায় রানটাইম অবশ্যই XR_ERROR_LIMIT_REACHED রিটার্ন করবে। ট্র্যাকারটি সফলভাবে তৈরি হলে, এটি প্রাথমিকভাবে XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID স্ট্যাটাসে প্রবেশ করবে এবং ট্র্যাকারটি ব্যবহার করার আগে স্ট্যাটাসটি XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID-এ পরিবর্তিত না হওয়া পর্যন্ত অ্যাপ্লিকেশনটিকে অবশ্যই অপেক্ষা করতে হবে। XrEventDataGeospatialTrackerStateChangedANDROID দেখুন। অ্যাপ্লিকেশনটি যদি এমন একটি ফাংশনে XrGeospatialTrackerANDROID পাস করে যা XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID স্ট্যাটাসে নেই, তাহলে রানটাইমকে XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID রিটার্ন করতেই হবে।

XrGeospatialTrackerANDROID হ্যান্ডেল xrDestroyGeospatialTrackerANDROID ফাংশনের মাধ্যমে অবশ্যই শেষ পর্যন্ত ফ্রি করতে হবে।

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

  • xrCreateGeospatialTrackerANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • session অবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে
  • createInfo অবশ্যই একটি সঠিক XrGeospatialTrackerCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
  • geospatialTrackerOutput অবশ্যই XrGeospatialTrackerANDROID হ্যান্ডেলের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • 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_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrGeospatialTrackerCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrGeospatialTrackerCreateInfoANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।

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

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

XrResult xrDestroyGeospatialTrackerANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker);

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

জিওস্পেশিয়াল ট্র্যাকার ও অন্তর্নিহিত রিসোর্স রিলিজ করার জন্য কোনও অ্যাপ্লিকেশন xrDestroyGeospatialTrackerANDROID ফাংশন ব্যবহার করতে পারে।

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

  • xrDestroyGeospatialTrackerANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • geospatialTracker অবশ্যই একটি সঠিক XrGeospatialTrackerANDROID হ্যান্ডেল হতে হবে

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

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

জিওস্পেশিয়াল ট্র্যাকার স্টেট

XrGeospatialTrackerStateANDROID এনিউমারেশন এইভাবে সংজ্ঞায়িত করা হয়:

typedef enum XrGeospatialTrackerStateANDROID {
    XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID = 0,
    XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID = 1,
    XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID = 2,
    XR_GEOSPATIAL_TRACKER_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrGeospatialTrackerStateANDROID;

XrGeospatialTrackerStateANDROID এনিউমারেশন জিওস্পেশিয়াল ট্র্যাকারের বিভিন্ন স্ট্যাটাস শনাক্ত করে।

এনিউমারেন্টের নিম্নলিখিত মান আছে:

Enum-এর বিবরণ

XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID

জিওস্পেশিয়াল ট্র্যাকার চলছে না।

XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID

জিওস্পেশিয়াল ট্র্যাকার চালু আছে এবং ব্যবহার করা যাবে।

XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID

জিওস্পেশিয়াল ট্র্যাকার শুরু করা যায়নি এবং এটি আর কখনও ব্যবহার করা যাবে না।

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

typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
    XrStructureType                    type;
    const void*                        next;
    XrGeospatialTrackerANDROID         geospatialTracker;
    XrGeospatialTrackerStateANDROID    state;
    XrResult                           initializationResult;
    XrTime                             time;
} XrEventDataGeospatialTrackerStateChangedANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • geospatialTracker হল XrGeospatialTrackerANDROID যার স্ট্যাটাস পরিবর্তন হয়েছে।
  • state হল নতুন XrGeospatialTrackerStateANDROID .
  • state যদি XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID হয়, তাহলে initializationResult হল সমস্যার ফলাফল, অন্যথায় XR_SUCCESS।
  • time হল XrTime যখন স্ট্যাটাস পরিবর্তন করা হয়েছে।

জিওস্পেশিয়াল ট্র্যাকার স্টেট পরিবর্তন হলে XrEventDataGeospatialTrackerStateChangedANDROID স্ট্রাকচার পাঠানো হয়। অ্যাপ্লিকেশনে সঠিক XrGeospatialTrackerANDROID থাকলে, এটি এই ইভেন্টের জন্য পোল করা উচিত। ট্র্যাকারের জন্য পাওয়া প্রথম ইভেন্টে state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID থাকবে। রানটাইম-নির্ধারিত সময়সীমা পেরিয়ে যাওয়ার পরে, স্ট্যাটাস অবশ্যই XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID অথবা XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID-এ পরিবর্তিত হবে। এই ট্রানজিশন সম্পূর্ণ হতে কিছুটা সময় লাগবে। state পরিবর্তন হয়ে XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID হলে, এটি অবশ্যই এই ট্র্যাকারের জন্য পাওয়া শেষ ইভেন্ট হতে হবে এবং initializationResult ফিল্ডে ত্রুটি কোড থাকবে। সমস্যা হতে কয়েক সেকেন্ড সময় লাগতে পারে। এই ক্ষেত্রে অ্যাপ্লিকেশনকে ট্র্যাকারটি নষ্ট করে দিতে হবে। state পরিবর্তন হয়ে XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID হলে, আগে তৈরি করা সব জিওস্পেশিয়াল অ্যাঙ্কর অবশ্যই স্থায়ীভাবে ট্র্যাক করা বন্ধ করে দেবে এবং অ্যাপ্লিকেশন দ্বারা ধ্বংস হয়ে যাবে। XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ও XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID-এর মধ্যে স্টেট হয়ত অনেকবার পরিবর্তন হতে পারে।

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

জিওস্পেশিয়াল পোজ

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

typedef struct XrGeospatialPoseANDROID {
    XrQuaternionf    eastUpSouthOrientation;
    double           latitude;
    double           longitude;
    double           altitude;
} XrGeospatialPoseANDROID;

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

  • eastUpSouthOrientation হল একটি XrQuaternionf যা একটি কোঅর্ডিনেট সিস্টেমের সাপেক্ষে ওরিয়েন্টেশনকে সংজ্ঞায়িত করে যেখানে +X=পূর্ব, +Y=উপর এবং +Z=দক্ষিণ।
  • latitude হল ডিগ্রিতে অক্ষাংশ, -৯০ থেকে +৯০-এর মধ্যে।
  • longitude হল ডিগ্রিতে দ্রাঘিমাংশ, -১৮০ থেকে +১৮০-এর মধ্যে।
  • altitude হল WGS84 উপবৃত্তাকার থেকে মিটারে উচ্চতা।

XrGeospatialPoseANDROID স্ট্রাকচার WGS84 উপবৃত্তাকার ব্যবহার করে পৃথিবীর সাপেক্ষে অবস্থান এবং ওরিয়েন্টেশন দেখায়।

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

  • XrGeospatialPoseANDROID ব্যবহার করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • latitude অবশ্যই একটি সঠিক double ভ্যালু হতে হবে
  • longitude অবশ্যই একটি সঠিক double ভ্যালু হতে হবে
  • altitude অবশ্যই একটি সঠিক double ভ্যালু হতে হবে

XrGeospatialPoseFlagBitsANDROID এনিউমারেশন এইভাবে সংজ্ঞায়িত করা হয়:

// Flag bits for XrGeospatialPoseFlagsANDROID
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID = 0x00000001;
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID = 0x00000002;

XrGeospatialPoseFlagBitsANDROID এনিউমারেশন জিওস্পেশিয়াল পোজের জন্য ফ্ল্যাগ নির্দিষ্ট করে।

ফ্ল্যাগ বিটের অর্থ হল:

ফ্ল্যাগ সম্পর্কিত বিবরণ

  • XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID — এটি দেখায় যে ওরিয়েন্টেশন মেম্বারে সঠিক ডেটা আছে
  • XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID — পজিশন মেম্বারে সঠিক ডেটা আছে কিনা তা দেখায়

XrGeospatialPoseFlagsANDROID টাইপ হল XrGeospatialPoseFlagBitsANDROID-এর বিটমাস্ক।

typedef XrFlags64 XrGeospatialPoseFlagsANDROID;

XrPosef-কে জিওস্পেশিয়াল পোজে কনভার্ট করা হচ্ছে

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

XrResult xrLocateGeospatialPoseFromPoseANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker,
    const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
    XrGeospatialPoseResultANDROID*              geospatialPoseResult);

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

  • geospatialTracker হল XrGeospatialTrackerANDROID যা কনভার্সনের জন্য ব্যবহার করা হয়।
  • locateInfo হল XrGeospatialPoseFromPoseLocateInfoANDROID-এর একটি পয়েন্টার যাতে কোয়েরি প্যারামিটার আছে।
  • geospatialPoseResult হল XrGeospatialPoseResultANDROID-এর একটি পয়েন্টার যা ফলাফল গ্রহণ করে।

xrLocateGeospatialPoseFromPoseANDROID ফাংশন XrGeospatialPoseFromPoseLocateInfoANDROID :: space-এ একটি পোজকে জিওস্পেশিয়াল পোজে কনভার্ট করে। geospatialTracker-এর স্ট্যাটাস XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID না হলে, রানটাইম XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID রিটার্ন করতেই হবে। ফাংশনটি XR_SUCCESS রিটার্ন করলে, geospatialPoseResult-এর XrGeospatialPoseResultANDROID :: poseFlags ফিল্ডটি নির্ধারণ করে যে কোন আউটপুট ফিল্ডগুলি বৈধ। XrGeospatialPoseResultANDROID :: poseFlags -এ XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID সেট করা না থাকলে, অ্যাপ্লিকেশনটি XrGeospatialPoseResultANDROID -এ XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy বা XrGeospatialPoseResultANDROID :: verticalAccuracy ফিল্ডগুলি অবশ্যই পড়বে না। XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID যদি XrGeospatialPoseResultANDROID :: poseFlags -এ সেট করা না থাকে, তাহলে অ্যাপ্লিকেশনটি XrGeospatialPoseANDROID :: eastUpSouthOrientation বা XrGeospatialPoseResultANDROID :: orientationYawAccuracy অবশ্যই রিড করবে না। XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID সেট করা না থাকলে, XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID-ও অবশ্যই সেট করা যাবে না।

অ্যাকুরেসি প্রত্যাশার চেয়ে কম হলে, এটি হতে পারে যে ডিভাইসটি VPS লোকালাইজেশন ব্যবহার করছে না। লোকালাইজেশন উন্নত করতে, অ্যাপ্লিকেশনটি ব্যবহারকারীকে তার ডিভাইসটি চিহ্ন এবং বিল্ডিংয়ের দিকে নির্দেশ করার নির্দেশ দিতে পারে।

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             time;
    XrPosef            pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • space হল XrSpace যেখানে pose সংজ্ঞায়িত করা হয়েছে।
  • time হল XrTime যার ভিত্তিতে pose মূল্যায়ন করা হবে।
  • pose হল space-এ XrPosef যা জিওস্পেশিয়াল পোজে কনভার্ট করতে হবে।

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

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

typedef struct XrGeospatialPoseResultANDROID {
    XrStructureType                 type;
    void*                           next;
    XrGeospatialPoseFlagsANDROID    poseFlags;
    XrGeospatialPoseANDROID         geospatialPose;
    double                          horizontalAccuracy;
    double                          verticalAccuracy;
    double                          orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • poseFlags হল XrGeospatialPoseFlagsANDROID-এর বিটমাস্ক যা পোজ কম্পোনেন্টের বৈধতা নির্দেশ করে।
  • geospatialPose হল ফলাফল হিসেবে পাওয়া XrGeospatialPoseANDROID .
  • horizontalAccuracy হল জিওস্পেশিয়াল পোজ পজিশনের আনুমানিক অনুভূমিক অ্যাকুরেসি, যা প্রদত্ত অক্ষাংশ এবং দ্রাঘিমাংশের চারপাশে ৬৮% কনফিডেন্স লেভেলের বৃত্তের ব্যাসার্ধ (মিটারে) হিসাবে সংজ্ঞায়িত করা হয়।
  • verticalAccuracy হল জিওস্পেশিয়াল পোজ পজিশনের আনুমানিক ভার্টিক্যাল অ্যাকুরেসি, যা প্রদত্ত উচ্চতার আশেপাশে ৬৮% কনফিডেন্স লেভেলের দূরত্ব মিটারে সংজ্ঞায়িত করা হয়। অন্যভাবে বলতে গেলে, ৬৮% সম্ভাবনা আছে যে প্রকৃত উচ্চতা [ XrGeospatialPoseANDROID :: altitude - verticalAccuracy , XrGeospatialPoseANDROID :: altitude \+ verticalAccuracy ] রেঞ্জের মধ্যে থাকবে।
  • orientationYawAccuracy হল জিওস্পেশিয়াল পোজ ওরিয়েন্টেশনের আনুমানিক ইয়াও অ্যাকুরেসি, যা প্রদত্ত ওরিয়েন্টেশনের চারপাশে ৬৮% কনফিডেন্স লেভেলের ডিগ্রিতে ব্যাসার্ধ হিসেবে সংজ্ঞায়িত করা হয়।

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

জিওস্পেশিয়াল পোজকে XrPosef-এ কনভার্ট করা

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

XrResult xrLocateGeospatialPoseANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker,
    const XrGeospatialPoseLocateInfoANDROID*    locateInfo,
    XrSpaceLocation*                            location);

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

  • geospatialTracker হল XrGeospatialTrackerANDROID যা কনভার্সনের জন্য ব্যবহার করা হয়।
  • locateInfo হল XrGeospatialPoseLocateInfoANDROID-এর একটি পয়েন্টার যাতে কোয়েরি প্যারামিটার রয়েছে।
  • location হল XrSpaceLocation-এর একটি পয়েন্টার যা ফলস্বরূপ পোজ পায়।

xrLocateGeospatialPoseANDROID ফাংশনটি একটি জিওস্পেশিয়াল পোজকে XrSpaceLocation-এ কনভার্ট করে। XrGeospatialTrackerANDROID রান না করলে, রানটাইম XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID রিটার্ন করতেই হবে। ফাংশনটি XR_SUCCESS রিটার্ন করলে, location-এর XrSpaceLocation :: locationFlags ফিল্ড নির্ধারণ করে যে কোন আউটপুট ফিল্ডগুলি সঠিক।

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

  • xrLocateGeospatialPoseANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • geospatialTracker অবশ্যই একটি সঠিক XrGeospatialTrackerANDROID হ্যান্ডেল হতে হবে
  • locateInfo অবশ্যই একটি সঠিক XrGeospatialPoseLocateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
  • location অবশ্যই XrSpaceLocation স্ট্রাকচারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrGeospatialPoseLocateInfoANDROID {
    XrStructureType            type;
    const void*                next;
    XrSpace                    space;
    XrTime                     time;
    XrGeospatialPoseANDROID    geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • space হল XrSpace যেখানে ফলাফল হিসেবে পাওয়া পোজ দেখানো হবে।
  • time হল XrTime যেখানে পোজটি লোকেট করতে হবে।
  • geospatialPose হল কনভার্ট করার জন্য XrGeospatialPoseANDROID।

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

VPS-এর উপলভ্যতা

XrVPSAvailabilityANDROID এনিউমারেশন এইভাবে সংজ্ঞায়িত করা হয়:

typedef enum XrVPSAvailabilityANDROID {
    XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
    XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
    XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;

XrVPSAvailabilityANDROID এনিউমারেশন VPS-এর উপলভ্যতা নির্দেশ করে।

এনিউমারেন্টের নিম্নলিখিত মান আছে:

Enum-এর বিবরণ

XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID

প্রদত্ত লোকেশনের কাছাকাছি VPS উপলভ্য নেই।

XR_VPS_AVAILABILITY_AVAILABLE_ANDROID

প্রদত্ত লোকেশনের কাছাকাছি VPS উপলভ্য।

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

XrResult xrCheckVpsAvailabilityAsyncANDROID(
    XrSession                                   session,
    double                                      latitude,
    double                                      longitude,
    XrFutureEXT*                                future);

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

  • session হল XrSession যা চেক করার জন্য ব্যবহার করা হয়।
  • latitude হল ডিগ্রিতে অক্ষাংশ।
  • longitude হল ডিগ্রিতে দ্রাঘিমাংশ।
  • future হল XrFutureEXT-এর একটি পয়েন্টার যা অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফল ধরে রাখবে।

ভিজ্যুয়াল পজিশনিং সার্ভিস (VPS) উপলভ্য থাকার অর্থ হল, কোনও নির্দিষ্ট লোকেশনে জিওস্পেশিয়াল অ্যাকুরেসি উন্নত করার জন্য VPS ব্যবহার করা যেতে পারে।

xrCheckVpsAvailabilityAsyncANDROID ফাংশনটি প্রদত্ত লোকেশনে VPS উপলভ্যতার জন্য একটি অ্যাসিঙ্ক্রোনাস চেক শুরু করে। এই ফাংশন কল করার জন্য অ্যাপ্লিকেশনটির XrGeospatialTrackerANDROID-এর প্রয়োজন নেই এবং এটি তৈরি করা হবে কিনা তা সিদ্ধান্ত নিতে এই অপারেশনের ফলাফল ব্যবহার করতে পারে। অ্যাপ্লিকেশনটি প্রয়োজনীয় অনুমতি না পেলে, রানটাইম অবশ্যই XR_ERROR_PERMISSION_INSUFFICIENT রিটার্ন করবে।

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

  • xrCheckVpsAvailabilityAsyncANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • session অবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে
  • latitude অবশ্যই একটি সঠিক double ভ্যালু হতে হবে
  • longitude অবশ্যই একটি সঠিক double ভ্যালু হতে হবে
  • future অবশ্যই XrFutureEXT ভ্যালুর পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

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

XrResult xrCheckVpsAvailabilityCompleteANDROID(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrVPSAvailabilityCheckCompletionANDROID*    completion);

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

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

  • xrCheckVpsAvailabilityCompleteANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশন অবশ্যই চালু করতে হবে
  • session অবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে
  • completion অবশ্যই XrVPSAvailabilityCheckCompletionANDROID স্ট্রাকচারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrVPSAvailabilityCheckCompletionANDROID {
    XrStructureType             type;
    void*                       next;
    XrResult                    futureResult;
    XrVPSAvailabilityANDROID    availability;
} XrVPSAvailabilityCheckCompletionANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • futureResult হল চেক অপারেশনের XrResult। futureResult যদি XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID হয়, তাহলে next চেনের স্ট্রাকচার হয়তো ব্যর্থতা সম্পর্কে আরও তথ্য প্রদান করতে পারে।
  • availability হল ফলস্বরূপ পাওয়া XrVPSAvailabilityANDROID . futureResult যদি XR_SUCCESS না হয়, তাহলে অ্যাপ্লিকেশনটি অবশ্যই এই ফিল্ডটি পড়বে না।

ভবিষ্যতের রিটার্ন কোড

futureResult ভ্যালু:

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID

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

উদাহরণ

জিওস্পেশিয়াল ট্র্যাকার সেট-আপ করুন

PFN_xrCheckVpsAvailabilityAsyncANDROID xrCheckVpsAvailabilityAsyncANDROID;
PFN_xrPollFutureEXT xrPollFutureEXT;
PFN_xrCheckVpsAvailabilityCompleteANDROID xrCheckVpsAvailabilityCompleteANDROID;
PFN_xrCreateGeospatialTrackerANDROID xrCreateGeospatialTrackerANDROID;
XrInstance instance = XR_NULL_HANDLE;
XrSystemId systemId = XR_NULL_SYSTEM_ID;
XrSession session = XR_NULL_HANDLE;
double lat = 37.422, lng = -122.084;

// Check for support.
XrSystemGeospatialPropertiesANDROID geospatialSystemProperties{
    XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{XR_TYPE_SYSTEM_PROPERTIES,
                                    &geospatialSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!geospatialSystemProperties.supportsGeospatial) {
  return;
}

// Check VPS Availability.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCheckVpsAvailabilityAsyncANDROID(session, lat, lng, &future));

XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
pollResult.state = XR_FUTURE_STATE_PENDING_EXT;
while (pollResult.state == XR_FUTURE_STATE_PENDING_EXT) {
  // Do in render loop/state loop.
  CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
}

XrVPSAvailabilityCheckCompletionANDROID vpsCompletion{
    XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID};
CHK_XR(xrCheckVpsAvailabilityCompleteANDROID(session, future, &vpsCompletion));
if (vpsCompletion.futureResult == XR_SUCCESS) {
  if (vpsCompletion.availability == XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID) {
    // Visual Positioning Service is not available. Accuracy of positions and
    // orientations from Geospatial APIs are expected to be lower at this location.
  } else {
    // Visual Positioning Service is available. Higher accuracy of position and
    // orientation is achievable at this location.
  }
}

// Create Geospatial Tracker.
XrGeospatialTrackerCreateInfoANDROID createInfo{
    XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID};
XrGeospatialTrackerANDROID geospatialTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateGeospatialTrackerANDROID(session, &createInfo, &geospatialTracker));

// In application main event loop:
while (true) {
  XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
  if (xrPollEvent(instance, &event) != XR_SUCCESS) {
    continue;
  }
  switch (event.type) {
    case XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID:
      const XrEventDataGeospatialTrackerStateChangedANDROID& eventData =
          *reinterpret_cast<XrEventDataGeospatialTrackerStateChangedANDROID*>(&event);
      switch (eventData.state) {
        case XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID:
          // Destroy existing anchors, if any.
          break;
        case XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID:
          // Start adding content.
          break;
        case XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID:
          // Handle eventData.initializationResult error result.
          break;
      }
  }
}

Geospatial Pose API কল করা

PFN_xrLocateGeospatialPoseFromPoseANDROID xrLocateGeospatialPoseFromPoseANDROID;
PFN_xrLocateGeospatialPoseANDROID xrLocateGeospatialPoseANDROID;

XrGeospatialTrackerANDROID geospatialTracker;

// Get pose from view space.
XrSpace viewSpace;
XrPosef identityPose = {{0,0,0,1},{0,0,0}};
XrGeospatialPoseFromPoseLocateInfoANDROID poseGetInfo{
    XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID};
XrGeospatialPoseResultANDROID poseResult{
    XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID};
poseGetInfo.space = viewSpace;
poseGetInfo.pose = identityPose;
poseGetInfo.time = 0;  // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseFromPoseANDROID(geospatialTracker, &poseGetInfo, &poseResult));
if ((poseResult.poseFlags & XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID) &&
    (poseResult.poseFlags & XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID)) {
  // poseResult.geospatialPose is valid.
}

// Convert Geospatial pose to an XrSpaceLocation.
XrGeospatialPoseLocateInfoANDROID poseLocateInfo{
    XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID};
XrSpaceLocation location{XR_TYPE_SPACE_LOCATION};
poseLocateInfo.space = viewSpace;
poseLocateInfo.geospatialPose = poseResult.geospatialPose;
poseLocateInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseANDROID(geospatialTracker, &poseLocateInfo, &location));
if ((location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) &&
    (location.locationFlags & XR_SPACE_LOCATION_POSITION_VALID_BIT)) {
  // location.pose is valid.
}

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

নতুন কমান্ড

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

নতুন Enum

নতুন বিটমাস্ক

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

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

    • XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
  • XrResult এক্সটেন্ড করা হচ্ছে :

    • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
    • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
    • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XrStructureType এক্সটেন্ড করা হচ্ছে :

    • XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID
    • XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID
    • XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID
    • XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID

সমস্যা

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

  • Revision 1, 2025-12-18 (Ben King)

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