XR_ANDROID_geospatial_anchor
String Nama
XR_ANDROID_geospatial_anchor
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
798
Revisi
1
Status Ratifikasi
Belum 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
30-10-2025
Status IP
Tidak ada klaim kekayaan intelektual yang diketahui.
Kontributor
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Ringkasan
Ekstensi ini menyediakan Anchor Geospasial dan Anchor Permukaan yang dibuat berdasarkan ekstensi Geospasial dasar. Anchor Geospasial adalah anchor yang diposisikan dalam ruang relatif terhadap Bumi pada lintang, bujur, dan ketinggian tertentu. Anchor Permukaan adalah anchor yang terkait dengan Bumi yang ditempatkan pada lintang, bujur, dan ketinggian tertentu yang terkait dengan permukaan seperti yang diketahui oleh Layanan Pemosisian Visual. Seiring meningkatnya akurasi posisi runtime relatif terhadap Bumi, pose Anchor akan menyesuaikan.
Kemampuan Sistem untuk Anchor Geospasial
Struktur XrSystemGeospatialAnchorPropertiesANDROID didefinisikan 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 anchor geospasial sistem dengan merantai struktur XrSystemGeospatialAnchorPropertiesANDROID ke XrSystemProperties saat memanggil xrGetSystemProperties .
Jika XrSystemGeospatialPropertiesANDROID :: supportsGeospatial adalah XR_TRUE , 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 berupaXR_TYPE_SYSTEM_GEOSPATIAL_ANCHOR_PROPERTIES_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Pelacakan Bidang untuk Anchor
Struktur XrGeospatialTrackerAnchorTrackingInfoANDROID didefinisikan 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 pemosisian anchor yang terkunci di permukaan.
Pelacakan bidang dapat diaktifkan untuk meningkatkan pemosisian anchor yang dikunci ke 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 berupaXR_TYPE_GEOSPATIAL_TRACKER_ANCHOR_TRACKING_INFO_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Anchor Geospasial
Fungsi xrCreateGeospatialAnchorANDROID didefinisikan 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 Status
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_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktur XrGeospatialAnchorCreateInfoANDROID didefinisikan 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 -
typeharus berupaXR_TYPE_GEOSPATIAL_ANCHOR_CREATE_INFO_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
geospatialTrackerharus berupa handle XrGeospatialTrackerANDROID yang valid -
geospatialPoseharus berupa struktur XrGeospatialPoseANDROID yang valid
Anchor Permukaan
Anchor permukaan adalah anchor yang ditempatkan relatif terhadap permukaan, seperti medan atau atap.
Enumerasi XrSurfaceAnchorTypeANDROID didefinisikan 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 platform yang terkait dengan anchor.
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_SURFACE_ANCHOR_TYPE_TERRAIN_ANDROID
Jenis anchor yang ditempatkan relatif terhadap permukaan tanah.
XR_SURFACE_ANCHOR_TYPE_ROOFTOP_ANDROID
Jenis anchor yang ditempatkan relatif terhadap atap, atau tanah jika tidak ada bangunan.
Fungsi xrCreateSurfaceAnchorAsyncANDROID didefinisikan 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 platform. Tidak seperti anchor geospasial 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 mungkin gagal secara asinkron dengan hasil XR_ERROR_SURFACE_ANCHOR_LOCATION_UNSUPPORTED_ANDROID jika tidak ada data permukaan untuk lokasi yang ditentukan. 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 Status
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_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktur XrSurfaceAnchorCreateInfoANDROID didefinisikan 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 sehubungan dengan 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 yang relatif terhadap permukaan yang ditentukan olehsurfaceAnchorType.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_geospatial_anchorharus diaktifkan sebelum menggunakan XrSurfaceAnchorCreateInfoANDROID -
typeharus berupaXR_TYPE_SURFACE_ANCHOR_CREATE_INFO_ANDROID -
nextharus berupaNULLatau 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 didefinisikan 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 Status
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 platform 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 rantainextmungkin memberikan informasi selengkapnya tentang kegagalan tersebut.anchorEntityIdadalahXrSpatialEntityIdEXTdari anchor yang dibuat, atau XR_NULL_SPATIAL_ENTITY_ID_EXT jikafutureResultbukanXR_SUCCESS.
Kode Status Mendatang
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 -
typeharus berupaXR_TYPE_SURFACE_ANCHOR_CREATE_COMPLETION_ANDROID -
nextharus berupaNULLatau 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
Masalah
Histori Versi
Revisi 1, 30-10-2025 (Ben King)
- Draf awal.