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

حالة عنوان IP

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

المساهمون

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

نظرة عامة

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

إمكانات النظام لاستخدام المرساة الجغرافية المكانية

يتم تعريف بنية 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 .

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

Geospatial Anchors

يتم تعريف الدالة 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 .

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

رموز الإرجاع

ناجحة

  • 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_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 .

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

رموز الإرجاع

ناجحة

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

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

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

رموز الإرجاع

ناجحة

  • 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:

ناجحة

  • 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 أكتوبر 2025 (Ben King)

    • مسودة أولية