XR_ANDROID_geospatial

নাম স্ট্রিং

XR_ANDROID_geospatial

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

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

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

৭৯০

সংশোধন

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

অনুমোদিত নয়

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

XR_EXT_future

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

২০২৫-১২-১৮

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

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

অবদানকারীরা

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

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

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

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

অনুমতি

এই এক্সটেনশনটি ব্যবহার করার জন্য অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ম্যানিফেস্টে অবশ্যই 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 হয়, তখন অ্যাপ্লিকেশনটির জিওস্পেশিয়াল কার্যকারিতা ব্যবহার করা থেকে বিরত থাকা উচিত

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

একটি ভূ-স্থানিক ট্র্যাকার হ্যান্ডেল তৈরি করুন

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 রিটার্ন করতে হবে।

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

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

  • 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

ভূ-স্থানিক ট্র্যাকার অবস্থা

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 এনুমারেশনটি একটি জিওস্পেশিয়াল ট্র্যাকারের বিভিন্ন অবস্থা শনাক্ত করে।

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

এনামের বিবরণ

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

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

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

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

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

  • xrLocateGeospatialPoseFromPoseANDROID কল করার আগে XR_ANDROID_geospatial এক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে।
  • geospatialTracker অবশ্যই একটি বৈধ XrGeospatialTrackerANDROID হ্যান্ডেল হতে হবে।
  • locateInfo অবশ্যই একটি বৈধ XrGeospatialPoseFromPoseLocateInfoANDROID স্ট্রাকচারের একটি পয়েন্টার হতে হবে।
  • geospatialPoseResult অবশ্যই একটি XrGeospatialPoseResultANDROID স্ট্রাকচারের একটি পয়েন্টার হতে হবে।

রিটার্ন কোড

সাফল্য

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

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

  • রূপান্তরের জন্য ব্যবহৃত XrGeospatialTrackerANDROID হলো geospatialTracker
  • 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_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

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

ভিপিএস প্রাপ্যতা

XrVPSAvailabilityANDROID এনুমারেশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়:

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

XrVPSAvailabilityANDROID এনুমারেশনটি ভিপিএস-এর প্রাপ্যতা নির্দেশ করে।

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

এনামের বিবরণ

XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID

প্রদত্ত অবস্থানের কাছাকাছি ভিপিএস উপলব্ধ নেই।

XR_VPS_AVAILABILITY_AVAILABLE_ANDROID

প্রদত্ত অবস্থানের কাছাকাছি ভিপিএস উপলব্ধ আছে।

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

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

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

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

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

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 হলো প্রাপ্ত XrVPSAvailabilityANDROIDfutureResult মান 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;
      }
  }
}

ভূ-স্থানিক ভঙ্গি এপিআই কল করুন

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.
}

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

নতুন কমান্ড

নতুন কাঠামো

নতুন এনাম

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

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

  • 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

সমস্যা

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

  • সংস্করণ ১, ২০২৫-১২-১৮ (বেন কিং)

    • প্রাথমিক সম্প্রসারণের বিবরণ।