XR_ANDROID_geospatial
Name String
XR_ANDROID_geospatial
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
790
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_EXT_future
Son Değiştirilme Tarihi
2025-12-18
IP Durumu
Bilinen IP hak talebi yok.
Katkıda bulunanlar
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Genel Bakış
Bu uzantı, Google'ın Geospatial API'si için Geospatial izleme sağlar. Bu API, hassas coğrafi konum ve yönlendirme sunar ve uygulamanın içeriği Dünya'ya göre yerleştirmesine olanak tanır. Bu işlem için hareket izleme, GPS ve diğer sensörlerin yanı sıra Google'ın Görsel Konumlandırma Sistemi (VPS) kullanılır. VPS, tam konum ve yön belirlemek için cihazın kamerasından alınan görüntüleri Street View görüntüleriyle karşılaştırır. Geospatial API genellikle bir metrenin altında konum doğruluğu (GPS'den çok daha iyi) ve bir derecenin altında yön doğruluğu sağlar.
Bu uzantıdaki API'leri (uzantı desteğini kontrol etme dışında) başarıyla kullanmak için uygulamanın XR_ANDROID_google_cloud_auth gibi bir mekanizma aracılığıyla kimlik doğrulama kimlik bilgilerini başarıyla ayarlamış olması gerekir . Kurulum ve hata sonuçları hakkında daha fazla bilgi için kimlik doğrulama uzantısının belgelerine bakın.
İzinler
Android uygulamalarının bu uzantıyı kullanabilmesi için manifest dosyalarında android.permission.ACCESS_FINE_LOCATION izninin listelenmesi gerekir. android.permission.ACCESS_FINE_LOCATION izni tehlikeli bir izin olarak kabul edilir. Uygulama, bu işlevleri kullanmak için çalışma zamanında izni istemelidir:
(Koruma düzeyi: tehlikeli)
Sistem kapasitesini inceleme
XrSystemGeospatialPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemGeospatialPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.supportsGeospatial, geçerli sistemin coğrafi uzamsal özellikleri destekleyip desteklemediğini belirten birXrBool32'dir.
Bir uygulama, xrGetSystemProperties çağrılırken XrSystemGeospatialPropertiesANDROID yapısını XrSystemProperties ile zincirleyerek sistemin coğrafi uzamsal özellikleri destekleyip desteklemediğini inceleyebilir.
Bir çalışma zamanı , supportsGeospatial için XR_FALSE döndürürse sistem, coğrafi uzamsal özellikleri desteklemez ve bu nedenle xrCreateGeospatialTrackerANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir . Uygulama, supportsGeospatial değeri XR_FALSE olduğunda coğrafi işlevsellik kullanmaktan kaçınmalıdır .
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, XrSystemGeospatialPropertiesANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Geospatial Tracker işleyeni oluşturma
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
xrCreateGeospatialTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
Parametre Açıklamaları
session, coğrafi izleyicinin etkin olacağı bir XrSession'dır.createInfo, başlangıç coğrafi izleyici parametrelerini belirten bir XrGeospatialTrackerCreateInfoANDROID yapısının işaretçisidir.geospatialTrackerOutput, oluşturulan XrGeospatialTrackerANDROID'in döndürüldüğü bir işleyiciye yönelik işaretçidir.
Bir uygulama, xrCreateGeospatialTrackerANDROID işlevini çağırarak XrGeospatialTrackerANDROID tutacağı oluşturabilir . Döndürülen XrGeospatialTrackerANDROID işleyici, API çağrılarında daha sonra kullanılabilir. Uygulama gerekli izinleri almadıysa çalışma zamanı mutlaka XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir . Belirli bir XrSession için aynı anda yalnızca bir XrGeospatialTrackerANDROID olabilir . Uygulama, bu işlev tekrar çağrılmadan önce önceki XrGeospatialTrackerANDROID nesnelerinin yok edildiğinden emin olmalıdır. Aksi takdirde çalışma zamanı XR_ERROR_LIMIT_REACHED değerini döndürmelidir. İzleyici başarıyla oluşturulursa başlangıçta XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID durumuna girer ve uygulama, izleyiciyi kullanmadan önce durumun XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID olarak değişmesini beklemelidir. XrEventDataGeospatialTrackerStateChangedANDROID konusuna bakın . Uygulama, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID durumunda olmayan bir XrGeospatialTrackerANDROID öğesini bunu gerektiren bir işleve iletiyorsa çalışma zamanı mutlaka XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir .
XrGeospatialTrackerANDROID tutacağı, xrDestroyGeospatialTrackerANDROID işlevi aracılığıyla sonunda serbest bırakılmalıdır.
Geçerli Kullanım (Dolaylı)
- xrCreateGeospatialTrackerANDROID çağrılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
createInfogeçerli bir XrGeospatialTrackerCreateInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
geospatialTrackerOutputXrGeospatialTrackerANDROID tutacına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrGeospatialTrackerCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.
Geçerli Kullanım (Dolaylı)
- XrGeospatialTrackerCreateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain . Ayrıca bkz: XrGeospatialTrackerAnchorTrackingInfoANDROID
xrDestroyGeospatialTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
Parametre Açıklamaları
geospatialTracker, yok edilecek XrGeospatialTrackerANDROID'dir.
Bir uygulama, coğrafi izleyiciyi ve temel kaynakları serbest bırakmak için xrDestroyGeospatialTrackerANDROID işlevini kullanabilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, xrDestroyGeospatialTrackerANDROID çağrılmadan önce etkinleştirilmelidir. -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID işleyeni olmalıdır.
Thread Safety
geospatialTrackerve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Coğrafi Takip Cihazı Durumu
XrGeospatialTrackerStateANDROID numaralandırması şu şekilde tanımlanır:
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 numaralandırması, bir coğrafi izleyicinin farklı durumlarını tanımlar.
Numaralandırılmış değerler aşağıdaki değerlere sahiptir:
Enum Açıklaması
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID
Geospatial Tracker çalışmıyor.
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
Jeo-uzamsal takip cihazı çalışıyor ve kullanılabilir durumda.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
Geospatial Tracker başlatılamadı ve hiçbir zaman kullanılamayacak.
XrEventDataGeospatialTrackerStateChangedANDROID yapısı şu şekilde tanımlanır:
typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialTrackerStateANDROID state;
XrResult initializationResult;
XrTime time;
} XrEventDataGeospatialTrackerStateChangedANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.geospatialTracker, durumu değişen XrGeospatialTrackerANDROID'dir.state, yeni XrGeospatialTrackerStateANDROID'dir .initializationResult,statedeğeriXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROIDise hata sonucudur, aksi takdirdeXR_SUCCESSolur .time, durum değişikliğinin gerçekleştiğiXrTime'dir.
XrEventDataGeospatialTrackerStateChangedANDROID yapısı, coğrafi izleyici durumu değiştiğinde gönderilir. Uygulamada geçerli bir XrGeospatialTrackerANDROID varsa bu etkinlik için yoklama yapılmalıdır. Bir izleyici için alınan ilk etkinlik state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID değerine sahip olur . Çalışma zamanında belirlenen bir süre sonra durum kesinlikle XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID veya XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID olarak değişmelidir . Bu geçiş rastgele bir süre alır. state, XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID olarak değişirse bu izleyici için alınan son etkinlik olmalı ve initializationResult alanında hata kodu bulunmalıdır. Hatanın oluşması birkaç saniye sürebilir. Bu durumda uygulama, takip cihazını imha etmelidir. state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID olarak değişirse daha önce oluşturulan tüm coğrafi uzamsal bağlantılar kalıcı olarak izlemeyi durdurmalı ve uygulama tarafından imha edilmelidir. Durum, XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ve XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID arasında rastgele olarak birçok kez değişebilir.
Geçerli Kullanım (Dolaylı)
- XrEventDataGeospatialTrackerStateChangedANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Coğrafi duruş
XrGeospatialPoseANDROID yapısı şu şekilde tanımlanır:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
Üye Açıklamaları
eastUpSouthOrientation, +X=Doğu, +Y=Yukarı ve +Z=Güney olan bir koordinat sistemine göre yönü tanımlayan bir XrQuaternionf'dir.latitude, -90 ile +90 arasında derece cinsinden enlemdir.longitude, -180 ile +180 arasında derece cinsinden boylamdır.altitude, WGS84 elipsoidinin üzerindeki rakımı metre cinsinden ifade eder.
XrGeospatialPoseANDROID yapısı, WGS84 elipsoidini kullanarak Dünya'ya göre bir konumu ve yönü temsil eder.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, XrGeospatialPoseANDROID kullanılmadan önce etkinleştirilmelidir. -
latitudegeçerli birdoubledeğeri olmalıdır. -
longitudegeçerli birdoubledeğeri olmalıdır. -
altitudegeçerli birdoubledeğeri olmalıdır.
XrGeospatialPoseFlagBitsANDROID numaralandırması şu şekilde tanımlanır:
// 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 numaralandırması, coğrafi uzamsal pozlar için işaretleri belirtir.
İşaret bitleri aşağıdaki anlamlara sahiptir:
İşaret açıklamaları
XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID: Oryantasyon üyesinin geçerli veriler içerdiğini gösterir.XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID: Konum üyesinin geçerli veriler içerdiğini gösterir.
XrGeospatialPoseFlagsANDROID türü, XrGeospatialPoseFlagBitsANDROID bit maskesidir .
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
XrPosef'i Geospatial Pose'a dönüştürme
xrLocateGeospatialPoseFromPoseANDROID işlevi şu şekilde tanımlanır:
XrResult xrLocateGeospatialPoseFromPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
XrGeospatialPoseResultANDROID* geospatialPoseResult);
Parametre Açıklamaları
geospatialTracker, dönüşüm için kullanılacak XrGeospatialTrackerANDROID'dir.locateInfo, sorgu parametrelerini içeren XrGeospatialPoseFromPoseLocateInfoANDROID öğesinin işaretçisidir.geospatialPoseResult, sonucu alan XrGeospatialPoseResultANDROID öğesinin işaretçisidir.
xrLocateGeospatialPoseFromPoseANDROID işlevi, XrGeospatialPoseFromPoseLocateInfoANDROID :: space içindeki bir pozu coğrafi poza dönüştürür. geospatialTracker durumu XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID değilse çalışma zamanı XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir . İşlev XR_SUCCESS değerini döndürürse geospatialPoseResult öğesinin XrGeospatialPoseResultANDROID :: poseFlags alanı , hangi çıkış alanlarının geçerli olduğunu belirler. XrGeospatialPoseResultANDROID :: poseFlags içinde XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID ayarlanmamışsa uygulama , XrGeospatialPoseResultANDROID içinde XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy veya XrGeospatialPoseResultANDROID :: verticalAccuracy alanlarını okumamalıdır . XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID , XrGeospatialPoseResultANDROID :: poseFlags içinde ayarlanmamışsa uygulama XrGeospatialPoseANDROID :: eastUpSouthOrientation veya XrGeospatialPoseResultANDROID :: orientationYawAccuracy değerini okumamalıdır . XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID ayarlanmamışsa XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID da ayarlanmamalıdır.
Doğruluk beklenenden düşükse bu durum, cihazın VPS yerelleştirmesini kullanmadığını gösterebilir. Uygulama, yerelleştirmeyi iyileştirmek için kullanıcıya cihazını işaretlere ve binalara yönlendirmesini söyleyebilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, xrLocateGeospatialPoseFromPoseANDROID çağrılmadan önce etkinleştirilmelidir. -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID işleyeni olmalıdır. -
locateInfogeçerli bir XrGeospatialPoseFromPoseLocateInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
geospatialPoseResultXrGeospatialPoseResultANDROID yapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrGeospatialPoseFromPoseLocateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.space,poseöğesinin tanımlandığı XrSpace'tir.time,posedeğerinin hesaplanacağıXrTimedeğeridir .pose,spaceiçindeki XrPosef olup coğrafi uzamsal duruşa dönüştürülür.
Geçerli Kullanım (Dolaylı)
- XrGeospatialPoseFromPoseLocateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
spaceGeçerli bir XrSpace hesabı olmalıdır.
XrGeospatialPoseResultANDROID yapısı şu şekilde tanımlanır:
typedef struct XrGeospatialPoseResultANDROID {
XrStructureType type;
void* next;
XrGeospatialPoseFlagsANDROID poseFlags;
XrGeospatialPoseANDROID geospatialPose;
double horizontalAccuracy;
double verticalAccuracy;
double orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.poseFlags, poz bileşenlerinin geçerliliğini gösteren XrGeospatialPoseFlagsANDROID bit maskesidir.geospatialPose, sonuçtaki XrGeospatialPoseANDROID'dir .horizontalAccuracy, verilen enlem ve boylamın etrafındaki% 68 güven düzeyindeki dairenin metre cinsinden yarıçapı olarak tanımlanan, coğrafi duruş konumunun tahmini yatay doğruluğudur.verticalAccuracy, Geospatial duruş konumunun tahmini dikey doğruluğudur. Belirli bir rakım etrafında% 68 güven düzeyindeki mesafeyi metre cinsinden ifade eder. Başka bir deyişle, gerçek yüksekliğin [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy] aralığında olma olasılığı% 68'dir.orientationYawAccuracy, verilen yönün etrafındaki% 68 güven düzeyinin derece cinsinden yarıçapı olarak tanımlanan, Coğrafi uzamsal duruş yönünün tahmini sapma doğruluğudur.
Geçerli Kullanım (Dolaylı)
- XrGeospatialPoseResultANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Geospatial Pose'u XrPosef'e dönüştürme
xrLocateGeospatialPoseANDROID işlevi şu şekilde tanımlanır:
XrResult xrLocateGeospatialPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseLocateInfoANDROID* locateInfo,
XrSpaceLocation* location);
Parametre Açıklamaları
geospatialTracker, dönüşüm için kullanılacak XrGeospatialTrackerANDROID'dir.locateInfo, sorgu parametrelerini içeren XrGeospatialPoseLocateInfoANDROID öğesinin işaretçisidir.location, sonuçta ortaya çıkan pozu alan XrSpaceLocation işaretçisidir.
xrLocateGeospatialPoseANDROID işlevi, coğrafi pozu XrSpaceLocation'a dönüştürür . XrGeospatialTrackerANDROID çalışmıyorsa çalışma zamanı XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID değerini döndürmelidir. İşlev XR_SUCCESS değerini döndürürse location öğesinin XrSpaceLocation :: locationFlags alanı , hangi çıkış alanlarının geçerli olduğunu belirler.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_geospatialuzantısı, xrLocateGeospatialPoseANDROID çağrılmadan önce etkinleştirilmelidir. -
geospatialTrackergeçerli bir XrGeospatialTrackerANDROID işleyeni olmalıdır. -
locateInfogeçerli bir XrGeospatialPoseLocateInfoANDROID yapısının işaretçisi olmalıdır. -
locationXrSpaceLocation yapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
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_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrGeospatialPoseLocateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.space, ortaya çıkan pozun temsil edileceği XrSpace'tir.time, pozu yerleştireceğinizXrTime'dir.geospatialPose, dönüştürülecek XrGeospatialPoseANDROID'dir.
Geçerli Kullanım (Dolaylı)
- XrGeospatialPoseLocateInfoANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
spaceGeçerli bir XrSpace hesabı olmalıdır. -
geospatialPosegeçerli bir XrGeospatialPoseANDROID yapısı olmalıdır.
VPS Kullanılabilirliği
XrVPSAvailabilityANDROID numaralandırması şu şekilde tanımlanır:
typedef enum XrVPSAvailabilityANDROID {
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;
XrVPSAvailabilityANDROID numaralandırması, VPS'nin kullanılabilirliğini gösterir.
Numaralandırılmış değerler aşağıdaki değerlere sahiptir:
Enum Açıklaması
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
VPS, belirtilen konumun yakınında kullanılamaz.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
VPS, belirtilen konumun yakınında kullanılabilir.
xrCheckVpsAvailabilityAsyncANDROID işlevi şu şekilde tanımlanır:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
Parametre Açıklamaları
session, kontrol için kullanılacak XrSession'dır.latitude, enlemin derece cinsinden değeridir.longitude, derece cinsinden boylamdır.future, eşzamansız işlemin sonucunu tutacak olanXrFutureEXTişaretçisidir.
Görsel Konumlandırma Hizmeti (VPS) kullanılabilirliği, belirli bir konumda coğrafi uzamsal doğruluğu artırmak için VPS'nin kullanılıp kullanılamayacağını gösterir.
xrCheckVpsAvailabilityAsyncANDROID işlevi, belirli bir konumda VPS kullanılabilirliği için eşzamansız bir kontrol başlatır. Uygulamanın bu işlevi çağırmak için XrGeospatialTrackerANDROID'e ihtiyacı yoktur ve bir tane oluşturup oluşturmayacağına karar vermek için bu işlemin sonucunu kullanabilir. Uygulama gerekli izinleri almadıysa çalışma zamanı mutlaka XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir .
Geçerli Kullanım (Dolaylı)
- xrCheckVpsAvailabilityAsyncANDROID çağrılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
latitudegeçerli birdoubledeğeri olmalıdır. -
longitudegeçerli birdoubledeğeri olmalıdır. -
future,XrFutureEXTdeğerine yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
xrCheckVpsAvailabilityCompleteANDROID işlevi şu şekilde tanımlanır:
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
Parametre Açıklamaları
session, kontrol için kullanılan XrSession'dır.future, xrCheckVpsAvailabilityAsyncANDROID tarafından döndürülenXrFutureEXTdeğeridir .completion, sonucu alan XrVPSAvailabilityCheckCompletionANDROID işaretçisidir.
Geçerli Kullanım (Dolaylı)
- xrCheckVpsAvailabilityCompleteANDROID çağrılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
completionXrVPSAvailabilityCheckCompletionANDROID yapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrVPSAvailabilityCheckCompletionANDROID yapısı şu şekilde tanımlanır:
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.futureResult, kontrol işleminin XrResult değeridir.futureResultXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDisenextzincirindeki bir yapı , hata hakkında daha fazla bilgi sağlayabilir.availability, sonuçta elde edilen XrVPSAvailabilityANDROID değeridir . Uygulama,futureResultdeğeriXR_SUCCESSolmadığı sürece bu alanı okumamalıdır .
Gelecekteki İade Kodları
futureResult değerleri:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
Geçerli Kullanım (Dolaylı)
- XrVPSAvailabilityCheckCompletionANDROID kullanılmadan önce
XR_ANDROID_geospatialuzantısı etkinleştirilmelidir. -
typeXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
futureResultgeçerli bir XrResult değeri olmalıdır. -
availabilitygeçerli bir XrVPSAvailabilityANDROID değeri olmalıdır.
Örnek
Geospatial Tracker'ı ayarlama
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;
}
}
}
Geospatial Pose API'lerini çağırma
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.
}
Yeni Nesne Türleri
Yeni Komutlar
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
Yeni Yapılar
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
XrSystemProperties'i genişletme :
Yeni Sıralamalar
Yeni bit maskeleri
Yeni Numaralandırılmış Değer Sabitleri
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONXrObjectType'i genişletme :
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
XrResult'ı genişletme :
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
XrStructureType'ı genişletme :
XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID
Sorunlar
Sürüm Geçmişi
1. düzeltme, 18.12.2025 (Ben King)
- İlk uzantı açıklaması.