XR_ANDROID_geospatial_anchor
String Nama
XR_ANDROID_geospatial_anchor
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
798
Revisi
1
Status Ratifikasi
Tidak diratifikasi
Dependensi Ekstensi dan Versi
XR_ANDROID_geospatial
dan
XR_EXT_future
dan
XR_EXT_spatial_entity
dan
XR_EXT_spatial_anchor
Tanggal Terakhir Diubah
2025-10-30
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Ringkasan
Ekstensi ini menyediakan Geospatial Anchors dan Surface Anchors yang dibuat berdasarkan ekstensi Geospatial dasar. Geospatial Anchors adalah anchor yang diposisikan di ruang relatif terhadap Bumi pada lintang, bujur, dan ketinggian tertentu. Surface Anchors adalah anchor relatif terhadap Bumi yang ditempatkan pada lintang, bujur, dan ketinggian tertentu relatif terhadap permukaan seperti yang diketahui oleh Visual Positioning Service. Saat akurasi runtime dari posisinya relatif terhadap Bumi meningkat, pose Anchor akan disesuaikan.
Kemampuan Sistem untuk Geospatial Anchors
Struktur XrSystemGeospatialAnchorPropertiesANDROID ditentukan sebagai:
typedef struct XrSystemGeospatialAnchorPropertiesANDROID {
XrStructureType type;
void* next;
uint32_t maxSurfaceAnchorCount;
} XrSystemGeospatialAnchorPropertiesANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.maxSurfaceAnchorCountadalahuint32_tyang menunjukkan jumlah maksimum anchor permukaan yang dapat dibuat.
Aplikasi dapat memeriksa kemampuan geospatial anchor sistem dengan merangkai struktur XrSystemGeospatialAnchorPropertiesANDROID ke XrSystemProperties saat memanggil xrGetSystemProperties .
Jika XrSystemGeospatialPropertiesANDROID :: supportsGeospatial adalah XR_TRUE , maka maxSurfaceAnchorCount menunjukkan jumlah maksimum anchor permukaan yang didukung runtime. Dalam hal ini, batas harus lebih besar dari 0.
Jika XrSystemGeospatialPropertiesANDROID :: supportsGeospatial bukan XR_TRUE , maka maxSurfaceAnchorCount harus 0.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrSystemGeospatialAnchorPropertiesANDROID -
typeharus beXR_TYPE_SYSTEM_GEOSPATIAL_ANCHOR_PROPERTIES_ANDROID -
nextharusNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Pelacakan Bidang untuk Anchor
Struktur XrGeospatialTrackerAnchorTrackingInfoANDROID ditentukan sebagai:
typedef struct XrGeospatialTrackerAnchorTrackingInfoANDROID {
XrStructureType type;
const void* next;
XrBool32 shouldTrackPlanes;
} XrGeospatialTrackerAnchorTrackingInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.shouldTrackPlanesadalahXrBool32yang menunjukkan apakah pelacak geospasial akan melacak bidang untuk meningkatkan penentuan posisi anchor yang terkunci di permukaan.
Pelacakan bidang dapat diaktifkan untuk meningkatkan penentuan posisi anchor yang terkunci di permukaan.
Jika aplikasi ingin mengaktifkan pelacakan bidang untuk meningkatkan pose anchor permukaan, aplikasi dapat merangkai struktur XrGeospatialTrackerAnchorTrackingInfoANDROID ke XrGeospatialTrackerCreateInfoANDROID saat memanggil xrCreateGeospatialTrackerANDROID .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrGeospatialTrackerAnchorTrackingInfoANDROID -
typeharus beXR_TYPE_GEOSPATIAL_TRACKER_ANCHOR_TRACKING_INFO_ANDROID -
nextharusNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Geospatial Anchors
Fungsi xrCreateGeospatialAnchorANDROID ditentukan sebagai:
XrResult xrCreateGeospatialAnchorANDROID(
XrSpatialContextEXT spatialContext,
const XrGeospatialAnchorCreateInfoANDROID* createInfo,
XrSpatialEntityIdEXT* anchorEntityId);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT untuk membuat anchor. Konteks harus dikonfigurasi untukXR_SPATIAL_CAPABILITY_ANCHOR_EXT, jika tidak, runtime harus menampilkanXR_ERROR_VALIDATION_FAILURE.createInfoadalah pointer ke XrGeospatialAnchorCreateInfoANDROID yang berisi parameter pembuatan anchor.anchorEntityIdadalah pointer keXrSpatialEntityIdEXTtempat ID entity anchor ditampilkan.
Jika XrGeospatialTrackerANDROID yang ditentukan dalam XrGeospatialAnchorCreateInfoANDROID :: geospatialTracker tidak dalam status XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID, runtime harus menampilkan XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum memanggil xrCreateGeospatialAnchorANDROID -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createInfoharus berupa pointer ke struktur XrGeospatialAnchorCreateInfoANDROID yang valid -
anchorEntityIdharus berupa pointer ke nilaiXrSpatialEntityIdEXT
Kode Retur
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktur XrGeospatialAnchorCreateInfoANDROID ditentukan sebagai:
typedef struct XrGeospatialAnchorCreateInfoANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialAnchorCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.geospatialTrackeradalah XrGeospatialTrackerANDROID yang akan digunakan untuk membuat anchor.geospatialPoseadalah pointer ke XrGeospatialPoseANDROID yang menentukan lokasi dan orientasi anchor.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrGeospatialAnchorCreateInfoANDROID -
typeharusXR_TYPE_GEOSPATIAL_ANCHOR_CREATE_INFO_ANDROID -
nextharusNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
geospatialTrackerharus berupa handle XrGeospatialTrackerANDROID yang valid -
geospatialPoseharus berupa struktur XrGeospatialPoseANDROID yang valid
Surface Anchors
Surface anchors adalah anchor yang ditempatkan relatif terhadap permukaan, seperti medan atau atap.
Enumerasi XrSurfaceAnchorTypeANDROID ditentukan sebagai:
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;
Enumerasi XrSurfaceAnchorTypeANDROID menentukan jenis permukaan yang relatif terhadap anchor.
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_SURFACE_ANCHOR_TYPE_TERRAIN_ANDROID
Jenis anchor yang ditempatkan relatif terhadap tanah.
XR_SURFACE_ANCHOR_TYPE_ROOFTOP_ANDROID
Jenis anchor yang ditempatkan relatif terhadap atap, atau tanah tempat tidak ada bangunan.
Fungsi xrCreateSurfaceAnchorAsyncANDROID ditentukan sebagai:
XrResult xrCreateSurfaceAnchorAsyncANDROID(
XrSpatialContextEXT spatialContext,
const XrSurfaceAnchorCreateInfoANDROID* createInfo,
XrFutureEXT* future);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT untuk membuat anchor.createInfoadalah pointer ke XrSurfaceAnchorCreateInfoANDROID yang berisi parameter pembuatan anchor.futureadalah pointer keXrFutureEXTyang akan menyimpan hasil operasi asinkron.
Fungsi xrCreateSurfaceAnchorAsyncANDROID memulai operasi asinkron untuk membuat anchor permukaan. Tidak seperti geospatial anchors standar, runtime dapat mengambil data medan untuk menentukan ketinggian yang benar. Runtime harus menampilkan XR_ERROR_LIMIT_REACHED jika aplikasi mencoba membuat lebih dari XrSystemGeospatialAnchorPropertiesANDROID :: maxSurfaceAnchorCount anchor permukaan sekaligus. Jika XrGeospatialTrackerANDROID yang ditentukan dalam XrSurfaceAnchorCreateInfoANDROID :: geospatialTracker tidak dalam status XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID, runtime harus menampilkan XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . Operasi dapat gagal secara asinkron dengan hasil XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID jika tidak ada data permukaan untuk lokasi yang diberikan. Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XR_SPATIAL_CAPABILITY_ANCHOR_EXT tidak dikonfigurasi untuk spatialContext .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum memanggil xrCreateSurfaceAnchorAsyncANDROID -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createInfoharus berupa pointer ke struktur XrSurfaceAnchorCreateInfoANDROID yang valid -
futureharus berupa pointer ke nilaiXrFutureEXT
Kode Retur
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktur XrSurfaceAnchorCreateInfoANDROID ditentukan sebagai:
typedef struct XrSurfaceAnchorCreateInfoANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrSurfaceAnchorTypeANDROID surfaceAnchorType;
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitudeRelativeToSurface;
} XrSurfaceAnchorCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.geospatialTrackeradalah XrGeospatialTrackerANDROID yang akan digunakan.surfaceAnchorTypeadalah XrSurfaceAnchorTypeANDROID untuk anchor.eastUpSouthOrientationadalah orientasi terkait sistem koordinat dengan +X=Timur, +Y=Atas, dan +Z=Selatan.latitudeadalah lintang dalam derajat, antara -89,9 dan +89,9.longitudeadalah bujur dalam derajat, antara -180 dan +180.altitudeRelativeToSurfaceadalah ketinggian dalam meter relatif terhadap permukaan yang ditentukan olehsurfaceAnchorType.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrSurfaceAnchorCreateInfoANDROID -
typeharusXR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROID -
nextharusNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
geospatialTrackerharus berupa handle XrGeospatialTrackerANDROID yang valid -
surfaceAnchorTypeharus berupa nilai XrSurfaceAnchorTypeANDROID yang valid -
latitudeharus berupa nilaidoubleyang valid -
longitudeharus berupa nilaidoubleyang valid -
altitudeRelativeToSurfaceharus berupa nilaidoubleyang valid
Fungsi xrCreateSurfaceAnchorCompleteANDROID ditentukan sebagai:
XrResult xrCreateSurfaceAnchorCompleteANDROID(
XrSpatialContextEXT spatialContext,
XrFutureEXT future,
XrSurfaceAnchorCreateCompletionANDROID* completion);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang digunakan untuk pembuatan.futureadalahXrFutureEXTyang ditampilkan oleh xrCreateSurfaceAnchorAsyncANDROID .completionadalah pointer ke XrSurfaceAnchorCreateCompletionANDROID yang menerima hasilnya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum memanggil xrCreateSurfaceAnchorCompleteANDROID -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
completionharus berupa pointer ke struktur XrSurfaceAnchorCreateCompletionANDROID
Kode Retur
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktur XrSurfaceAnchorCreateCompletionANDROID menyimpan hasil pembuatan anchor permukaan asinkron.
typedef struct XrSurfaceAnchorCreateCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialEntityIdEXT anchorEntityId;
} XrSurfaceAnchorCreateCompletionANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.futureResultadalah XrResult dari operasi pembuatan. JikafutureResultadalahXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID, struktur dalam rantainextdapat memberikan informasi selengkapnya tentang kegagalan.anchorEntityIdadalahXrSpatialEntityIdEXTdari anchor yang dibuat, atau XR_NULL_SPATIAL_ENTITY_ID_EXT jikafutureResultbukanXR_SUCCESS.
Kode Retur Masa Depan
Nilai futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROIDXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrSurfaceAnchorCreateCompletionANDROID -
typeharusXR_TYPE_SURFACE_ANCHOR_CREATE_COMPLETION_ANDROID -
nextharusNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
futureResultharus berupa nilai XrResult yang valid
Contoh
Membuat Anchor Medan
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.
}
Perintah Baru
- xrCreateGeospatialAnchorANDROID
- xrCreateSurfaceAnchorAsyncANDROID
- xrCreateSurfaceAnchorCompleteANDROID
Struktur Baru
- XrGeospatialAnchorCreateInfoANDROID
- XrSurfaceAnchorCreateCompletionANDROID
- XrSurfaceAnchorCreateInfoANDROID
Memperluas XrGeospatialTrackerCreateInfoANDROID :
Memperluas XrSystemProperties :
Enum Baru
Konstanta Enum Baru
XR_ANDROID_GEOSPATIAL_ANCHOR_EXTENSION_NAMEXR_ANDROID_geospatial_anchor_SPEC_VERSIONMemperluas XrResult :
XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID
Memperluas XrStructureType :
XR_TYPE_GEOSPATIAL_ANCHOR_CREATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_TRACKER_ANCHOR_TRACKING_INFO_ANDROIDXR_TYPE_SURFACE_ANCHOR_CREATE_COMPLETION_ANDROIDXR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_GEOSPATIAL_ANCHOR_PROPERTIES_ANDROID
Issues
Histori Versi
Revisi 1, 30-10-2025 (Ben King)
- Draf awal.