XR_ANDROID_geospatial_anchor

Name String

XR_ANDROID_geospatial_anchor

نوع الإضافة

إضافة مثيل

رقم الإضافة المسجَّل

798

المراجعة

1

حالة التصديق

لم تتم المصادقة عليها

الاعتماد على الإضافات والإصدارات

XR_ANDROID_geospatial
و
XR_EXT_future
و
XR_EXT_spatial_entity
و
XR_EXT_spatial_anchor

تاريخ آخر تعديل

2025-10-30

حالة الملكية الفكرية

ما مِن مطالبات معروفة بشأن الملكية الفكرية.

المساهمون

جون أولمان، Google
بن كينغ، Google
نيهاف جاين، Google
جاريد فايندر، Google

نظرة عامة

توفّر هذه الإضافة "نقاط تثبيت جغرافية مكانية" و"نقاط تثبيت على السطح" تستند إلى إضافة Geospatial الأساسية. "نقاط الارتكاز الجغرافية المكانية" هي نقاط ارتكاز يتم وضعها في الفضاء بالنسبة إلى الأرض عند خط عرض وخط طول وارتفاع معيّن. "نقاط الارتكاز على السطح" هي نقاط ارتكاز مرتبطة بالأرض يتم وضعها عند خطوط طول وعرض وارتفاع معيّنة بالنسبة إلى سطح معيّن، كما هو معروف في "خدمة تحديد الموقع المرئي". ومع تحسُّن دقة موضع بيئة التشغيل بالنسبة إلى الأرض، سيتم تعديل وضعية "نقطة الارتكاز" وفقًا لذلك.

إمكانية النظام في ما يتعلّق بالمراسي الجغرافية المكانية

يتم تعريف البنية XrSystemGeospatialAnchorPropertiesANDROID على النحو التالي:

typedef struct XrSystemGeospatialAnchorPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    uint32_t           maxSurfaceAnchorCount;
} XrSystemGeospatialAnchorPropertiesANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة.
  • ‫maxSurfaceAnchorCount هو uint32_t يشير إلى الحد الأقصى لعدد نقاط الارتكاز على السطح التي يمكن إنشاؤها.

يمكن للتطبيق فحص إمكانات الإرساء الجغرافي المكاني للنظام من خلال ربط بنية XrSystemGeospatialAnchorPropertiesANDROID بـ XrSystemProperties عند استدعاء xrGetSystemProperties .

إذا كانت قيمة XrSystemGeospatialPropertiesANDROID :: supportsGeospatial هي XR_TRUE، يشير maxSurfaceAnchorCount إلى الحد الأقصى لعدد نقاط الارتكاز على السطح التي يتيحها وقت التشغيل. يجب أن يكون الحدّ الأقصى أكبر من 0 في هذه الحالة.

إذا لم تكن قيمة XrSystemGeospatialPropertiesANDROID :: supportsGeospatial هي XR_TRUE، يجب أن تكون قيمة maxSurfaceAnchorCount هي 0.

الاستخدام الصالح (ضمني)

تتبُّع السطح المستوي للمثبّتات

يتم تحديد بنية XrGeospatialTrackerAnchorTrackingInfoANDROID على النحو التالي:

typedef struct XrGeospatialTrackerAnchorTrackingInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrBool32           shouldTrackPlanes;
} XrGeospatialTrackerAnchorTrackingInfoANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫shouldTrackPlanes هي قيمة XrBool32 تشير إلى ما إذا كان أداة التتبّع الجغرافي المكاني ستتتبّع الأسطح لتحسين تحديد موضع نقاط الارتساء المثبّتة على السطح.

يمكن تفعيل ميزة "تتبُّع السطح المستوي" لتحسين تحديد موضع نقاط الارتساء المثبَّتة على السطح.

إذا أراد التطبيق تفعيل ميزة تتبُّع السطح لتحسين أوضاع نقاط الارتكاز على السطح، يمكنه ربط بنية XrGeospatialTrackerAnchorTrackingInfoANDROID بـ XrGeospatialTrackerCreateInfoANDROID عند استدعاء xrCreateGeospatialTrackerANDROID .

الاستخدام الصالح (ضمني)

نقاط الارتكاز الجغرافية المكانية

يتم تعريف الدالة xrCreateGeospatialAnchorANDROID على النحو التالي:

XrResult xrCreateGeospatialAnchorANDROID(
    XrSpatialContextEXT                         spatialContext,
    const XrGeospatialAnchorCreateInfoANDROID*  createInfo,
    XrSpatialEntityIdEXT*                       anchorEntityId);

أوصاف المَعلمات

  • ‫spatialContext هو XrSpatialContextEXT لإنشاء نقطة الارتساء فيه. يجب ضبط السياق على XR_SPATIAL_CAPABILITY_ANCHOR_EXT، وإلا يجب أن تعرض بيئة التشغيل XR_ERROR_VALIDATION_FAILURE .
  • ‫createInfo هو مؤشر إلى XrGeospatialAnchorCreateInfoANDROID يحتوي على مَعلمات إنشاء نقاط الارتكاز.
  • ‫anchorEntityId هو مؤشر إلى XrSpatialEntityIdEXT يتم فيه عرض رقم تعريف الكيان الثابت.

إذا لم يكن XrGeospatialTrackerANDROID المحدّد في XrGeospatialAnchorCreateInfoANDROID :: geospatialTracker في الحالة XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID، يجب أن يعرض وقت التشغيل XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID .

الاستخدام الصالح (ضمني)

رموز الإرجاع

Success

  • 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_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

يتم تعريف البنية XrGeospatialAnchorCreateInfoANDROID على النحو التالي:

typedef struct XrGeospatialAnchorCreateInfoANDROID {
    XrStructureType               type;
    const void*                   next;
    XrGeospatialTrackerANDROID    geospatialTracker;
    XrGeospatialPoseANDROID       geospatialPose;
} XrGeospatialAnchorCreateInfoANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫geospatialTracker هي XrGeospatialTrackerANDROID التي سيتم استخدامها لإنشاء نقطة الارتكاز.
  • ‫geospatialPose هو مؤشر إلى XrGeospatialPoseANDROID يحدّد الموقع الجغرافي للارتساء واتجاهه.

الاستخدام الصالح (ضمني)

الإعلانات الثابتة على سطح الصفحة

نقاط الارتساء على سطح هي نقاط ارتساء يتم وضعها بالنسبة إلى سطح معيّن، مثل التضاريس أو أسطح المباني.

يتم تعريف التعداد XrSurfaceAnchorTypeANDROID على النحو التالي:

typedef enum XrSurfaceAnchorTypeANDROID {
    XR_SURFACE_ANCHOR_TYPE_TERRAIN_ANDROID = 1,
    XR_SURFACE_ANCHOR_TYPE_ROOFTOP_ANDROID = 2,
    XR_SURFACE_ANCHOR_TYPE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSurfaceAnchorTypeANDROID;

يحدّد التعداد XrSurfaceAnchorTypeANDROID نوع السطح الذي يرتبط به الارتساء.

تحتوي التعدادات على القيم التالية:

وصف التعداد

XR_SURFACE_ANCHOR_TYPE_TERRAIN_ANDROID

نوع نقطة ارتساء موضوعة بالنسبة إلى الأرض

XR_SURFACE_ANCHOR_TYPE_ROOFTOP_ANDROID

نوع علامة الإرساء الموضوعة بالنسبة إلى سطح المبنى أو الأرض في حال عدم وجود مبنى

يتم تعريف الدالة xrCreateSurfaceAnchorAsyncANDROID على النحو التالي:

XrResult xrCreateSurfaceAnchorAsyncANDROID(
    XrSpatialContextEXT                         spatialContext,
    const XrSurfaceAnchorCreateInfoANDROID*     createInfo,
    XrFutureEXT*                                future);

أوصاف المَعلمات

  • ‫spatialContext هو XrSpatialContextEXT لإنشاء نقطة الارتساء فيه.
  • ‫createInfo هو مؤشر إلى XrSurfaceAnchorCreateInfoANDROID يحتوي على معلَمات إنشاء نقاط الارتكاز.
  • ‫future هو مؤشر إلى XrFutureEXT سيحتفظ بنتيجة العملية غير المتزامنة.

تبدأ الدالة xrCreateSurfaceAnchorAsyncANDROID عملية غير متزامنة لإنشاء نقطة تثبيت على سطح. على عكس نقاط الارتكاز الجغرافية المكانية العادية، قد يسترجع وقت التشغيل بيانات التضاريس لتحديد الارتفاع الصحيح. يجب أن يعرض وقت التشغيل XR_ERROR_LIMIT_REACHED إذا حاول التطبيق إنشاء أكثر من XrSystemGeospatialAnchorPropertiesANDROID :: maxSurfaceAnchorCount نقاط ارتساء سطحية في المرة الواحدة. إذا لم يكن XrGeospatialTrackerANDROID المحدّد في XrSurfaceAnchorCreateInfoANDROID :: geospatialTracker في الحالة XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID، يجب أن يعرض وقت التشغيل XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . قد تفشل العملية بشكل غير متزامن مع النتيجة XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID في حال عدم توفّر بيانات سطحية للموقع الجغرافي المحدّد. يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE إذا لم يتم ضبط XR_SPATIAL_CAPABILITY_ANCHOR_EXT لـ spatialContext .

الاستخدام الصالح (ضمني)

رموز الإرجاع

Success

  • 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_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

يتم تحديد بنية XrSurfaceAnchorCreateInfoANDROID على النحو التالي:

typedef struct XrSurfaceAnchorCreateInfoANDROID {
    XrStructureType               type;
    const void*                   next;
    XrGeospatialTrackerANDROID    geospatialTracker;
    XrSurfaceAnchorTypeANDROID    surfaceAnchorType;
    XrQuaternionf                 eastUpSouthOrientation;
    double                        latitude;
    double                        longitude;
    double                        altitudeRelativeToSurface;
} XrSurfaceAnchorCreateInfoANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫geospatialTracker هي قيمة XrGeospatialTrackerANDROID التي سيتم استخدامها.
  • ‫surfaceAnchorType هو XrSurfaceAnchorTypeANDROID للمثبّت.
  • ‫eastUpSouthOrientation هو الاتجاه بالنسبة إلى نظام إحداثيات حيث ‎+X=الشرق و‎+Y=الأعلى و‎+Z=الجنوب.
  • ‫latitude هو خط العرض بالدرجات، بين ‎-89.9 و‎+89.9.
  • ‫longitude هو خط الطول بالدرجات، ويتراوح بين ‎-180 و‎+180.
  • ‫altitudeRelativeToSurface هو الارتفاع بالأمتار نسبةً إلى السطح المحدّد في surfaceAnchorType .

الاستخدام الصالح (ضمني)

  • يجب تفعيل إضافة XR_ANDROID_geospatial_anchor قبل استخدام XrSurfaceAnchorCreateInfoANDROID
  • يجب أن يكون type XR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROID
  • next يجب أن تكون NULL أو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية
  • يجب أن يكون geospatialTracker اسم معرِّف صالحًا لـ XrGeospatialTrackerANDROID
  • surfaceAnchorType يجب أن تكون قيمة صالحة لـ XrSurfaceAnchorTypeANDROID
  • latitude يجب أن تكون قيمة صالحة لسمة double
  • longitude يجب أن تكون قيمة صالحة لسمة double
  • altitudeRelativeToSurface يجب أن تكون قيمة صالحة لسمة double

يتم تعريف الدالة xrCreateSurfaceAnchorCompleteANDROID على النحو التالي:

XrResult xrCreateSurfaceAnchorCompleteANDROID(
    XrSpatialContextEXT                         spatialContext,
    XrFutureEXT                                 future,
    XrSurfaceAnchorCreateCompletionANDROID*     completion);

أوصاف المَعلمات

الاستخدام الصالح (ضمني)

رموز الإرجاع

Success

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

تحتوي البنية XrSurfaceAnchorCreateCompletionANDROID على نتيجة إنشاء نقطة تثبيت غير متزامنة على سطح.

typedef struct XrSurfaceAnchorCreateCompletionANDROID {
    XrStructureType         type;
    void*                   next;
    XrResult                futureResult;
    XrSpatialEntityIdEXT    anchorEntityId;
} XrSurfaceAnchorCreateCompletionANDROID;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫futureResult هو XrResult لعملية الإنشاء. إذا كانت قيمة futureResult هي XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID، قد توفّر بنية في سلسلة next مزيدًا من المعلومات حول الخطأ.
  • ‫anchorEntityId هو XrSpatialEntityIdEXT نقطة الارتساء التي تم إنشاؤها، أو XR_NULL_SPATIAL_ENTITY_ID_EXT إذا لم يكن futureResult هو XR_SUCCESS .

رموز الإرجاع المستقبلية

قيم futureResult:

Success

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

تعذّر الإجراء

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID
  • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID

الاستخدام الصالح (ضمني)

مثال

إنشاء نقطة ارتساء تضاريس

PFN_xrCreateSpatialContextAsyncEXT xrCreateSpatialContextAsyncEXT;
PFN_xrCreateSpatialContextCompleteEXT xrCreateSpatialContextCompleteEXT;
PFN_xrCreateSurfaceAnchorAsyncANDROID xrCreateSurfaceAnchorAsyncANDROID;
PFN_xrPollFutureEXT xrPollFutureEXT;
PFN_xrCreateSurfaceAnchorCompleteANDROID xrCreateSurfaceAnchorCompleteANDROID;
XrInstance instance;
XrSession session;
XrGeospatialTrackerANDROID geospatialTracker;

// Create a spatial context
XrSpatialContextEXT spatialContext{};
{
  std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
    XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT,
  };

  XrSpatialCapabilityConfigurationAnchorEXT
       anchorConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT};
  anchorConfig.capability = XR_SPATIAL_CAPABILITY_ANCHOR_EXT;
  anchorConfig.enabledComponentCount = enabledComponents.size();
  anchorConfig.enabledComponents = enabledComponents.data();

  std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
    reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&anchorConfig),
  };

  XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
  spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
  spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
  XrFutureEXT createContextFuture;
  CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));

  // ... wait until future is ready ...

  XrCreateSpatialContextCompletionEXT contextCompletion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
  CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &contextCompletion));
  if (contextCompletion.futureResult != XR_SUCCESS) {
    return;
  }

  spatialContext = contextCompletion.spatialContext;
}

XrSurfaceAnchorCreateInfoANDROID anchorCreateInfo{
    XR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROID};
anchorCreateInfo.surfaceAnchorType = XR_SURFACE_ANCHOR_TYPE_TERRAIN_ANDROID;
anchorCreateInfo.eastUpSouthOrientation = {0, 0, 0, 1};
anchorCreateInfo.latitude = 37.7749;
anchorCreateInfo.longitude = -122.4194;
anchorCreateInfo.altitudeRelativeToSurface = 0;
anchorCreateInfo.geospatialTracker = geospatialTracker;
XrFutureEXT anchorFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSurfaceAnchorAsyncANDROID(spatialContext, &anchorCreateInfo, &anchorFuture));

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

XrSurfaceAnchorCreateCompletionANDROID anchorCompletion{
    XR_TYPE_SURFACE_ANCHOR_CREATE_COMPLETION_ANDROID};
CHK_XR(xrCreateSurfaceAnchorCompleteANDROID(spatialContext, anchorFuture, &anchorCompletion));
if (anchorCompletion.futureResult == XR_SUCCESS) {
  // Use completion.anchorEntityId.
  XrSpatialEntityIdEXT anchorId = anchorCompletion.anchorEntityId;

  // Query in UpdateSnapshot.
}

الأوامر الجديدة

منشآت جديدة

عمليات تعداد جديدة

ثوابت تعداد جديدة

  • XR_ANDROID_GEOSPATIAL_ANCHOR_EXTENSION_NAME
  • XR_ANDROID_geospatial_anchor_SPEC_VERSION
  • توسيع XrResult :

    • XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID
  • توسيع XrStructureType :

    • XR_TYPE_GEOSPATIAL_ANCHOR_CREATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_TRACKER_ANCHOR_TRACKING_INFO_ANDROID
    • XR_TYPE_SURFACE_ANCHOR_CREATE_COMPLETION_ANDROID
    • XR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROID
    • XR_TYPE_SYSTEM_GEOSPATIAL_ANCHOR_PROPERTIES_ANDROID

المشاكل

سجلّ التعديلات

  • النسخة المنقحة 1، ‏30-10-2025 (بن كينغ)

    • مسودة أولية