XR_ANDROID_geospatial
이름 문자열
XR_ANDROID_geospatial
확장 프로그램 유형
인스턴스 확장
등록된 내선 번호
790
버전
1
비준 상태
비준되지 않음
확장 프로그램 및 버전 종속 항목
XR_EXT_future
최종 수정일
2025-12-18
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
존 울먼, Google
벤 킹, Google
니하브 제인, Google
제러드 파인더, Google
개요
이 확장 프로그램은 정확한 지리적 위치와 방향을 제공하고 애플리케이션이 지구를 기준으로 콘텐츠를 배치할 수 있도록 지원하는 Google의 Geospatial API를 위한 지리 공간 추적을 제공합니다. 이러한 작업은 모션 추적, GPS, 기타 센서, Google의 시각적 위치 시스템 (VPS)을 조합하여 실행됩니다. VPS는 기기 카메라의 이미지를 스트리트 뷰 이미지와 비교하여 정확한 위치와 방향을 파악합니다. Geospatial API는 흔히 미터 이하의 위치 정확도 (GPS보다 훨씬 나음)와 도 이하의 방향 정확도를 제공합니다.
확장 프로그램 지원 여부를 확인하는 것 외에 이 확장 프로그램의 API를 사용하려면 애플리케이션이 XR_ANDROID_google_cloud_auth와 같은 메커니즘을 통해 인증 사용자 인증 정보를 성공적으로 설정해야 합니다 . 설정 및 오류 결과에 관한 자세한 내용은 인증 확장 프로그램 문서를 참고하세요.
권한
Android 애플리케이션은 이 확장 프로그램을 사용하려면 매니페스트에 android.permission.ACCESS_FINE_LOCATION 권한이 나열되어 있어야 합니다. android.permission.ACCESS_FINE_LOCATION 권한은 위험한 권한으로 간주됩니다. 애플리케이션은 다음 기능을 사용하기 위해 런타임에 권한을 요청해야 합니다.
(보호 수준: 위험)
시스템 기능 검사
XrSystemGeospatialPropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemGeospatialPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.supportsGeospatial는XrBool32로 , 현재 시스템이 지리정보 기능을 지원하는지 여부를 나타냅니다.
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemGeospatialPropertiesANDROID 구조를 XrSystemProperties에 연결하여 시스템이 지리 공간 기능을 지원하는지 검사할 수 있습니다 .
런타임이 supportsGeospatial에 대해 XR_FALSE를 반환하면 시스템이 지리 공간 기능을 지원하지 않으므로 xrCreateGeospatialTrackerANDROID에서 XR_ERROR_FEATURE_UNSUPPORTED를 반환해야 합니다 . supportsGeospatial이 XR_FALSE인 경우 애플리케이션은 지리정보 기능을 사용하지 않아야 합니다 .
유효한 사용 (암시적)
- XrSystemGeospatialPropertiesANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
Geospatial Tracker 핸들 만들기
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
xrCreateGeospatialTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
매개변수 설명
session은 지리 공간 추적기가 활성화될 XrSession입니다.createInfo는 초기 공간 추적기 매개변수를 지정하는 XrGeospatialTrackerCreateInfoANDROID 구조체에 대한 포인터입니다.geospatialTrackerOutput은 생성된 XrGeospatialTrackerANDROID가 반환되는 핸들의 포인터입니다.
애플리케이션은 xrCreateGeospatialTrackerANDROID를 호출하여 XrGeospatialTrackerANDROID 핸들을 만들 수 있습니다 . 반환된 XrGeospatialTrackerANDROID 핸들은 이후 API 호출에서 사용할 수 있습니다. 애플리케이션이 필수 권한을 획득하지 못한 경우 런타임은 XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다 . 특정 XrSession에는 한 번에 하나의 XrGeospatialTrackerANDROID만 있을 수 있습니다 . 애플리케이션은 이 함수를 다시 호출하기 전에 이전 XrGeospatialTrackerANDROID 객체가 소멸되었는지 확인해야 합니다. 그렇지 않으면 런타임은 XR_ERROR_LIMIT_REACHED를 반환해야 합니다. 트래커가 성공적으로 생성되면 처음에는 XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID 상태가 되며, 애플리케이션은 상태가 XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID로 변경될 때까지 기다린 후 트래커를 사용해야 합니다. XrEventDataGeospatialTrackerStateChangedANDROID를 참고하세요 . 애플리케이션이 XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID 상태가 아닌 XrGeospatialTrackerANDROID를 이를 필요로 하는 함수에 전달하면 런타임은 XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID를 반환해야 합니다 .
XrGeospatialTrackerANDROID 핸들은 결국 xrDestroyGeospatialTrackerANDROID 함수를 통해 해제해야 합니다.
유효한 사용 (암시적)
- xrCreateGeospatialTrackerANDROID를 호출하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
session은 유효한 XrSession 핸들이어야 합니다. -
createInfo는 유효한 XrGeospatialTrackerCreateInfoANDROID 구조체에 대한 포인터여야 합니다. -
geospatialTrackerOutput은 XrGeospatialTrackerANDROID 핸들에 대한 포인터여야 합니다.
반환 코드
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 구조는 다음과 같이 정의됩니다.
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
유효한 사용 (암시적)
- XrGeospatialTrackerCreateInfoANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다 . 참고: XrGeospatialTrackerAnchorTrackingInfoANDROID
xrDestroyGeospatialTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
매개변수 설명
geospatialTracker은 소멸시킬 XrGeospatialTrackerANDROID입니다.
애플리케이션은 xrDestroyGeospatialTrackerANDROID 함수를 사용하여 지리 공간 추적기와 기본 리소스를 해제할 수 있습니다.
유효한 사용 (암시적)
-
XR_ANDROID_geospatial확장 프로그램은 xrDestroyGeospatialTrackerANDROID를 호출하기 전에 사용 설정해야 합니다. -
geospatialTracker은 유효한 XrGeospatialTrackerANDROID 핸들이어야 합니다.
스레드 안전
geospatialTracker및 모든 하위 핸들에 대한 액세스는 외부에서 동기화해야 합니다.
반환 코드
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
지리 공간 추적기 상태
XrGeospatialTrackerStateANDROID 열거형은 다음과 같이 정의됩니다.
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 열거형은 지리 공간 추적기의 다양한 상태를 식별합니다.
열거형에는 다음 값이 있습니다.
열거형 설명
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID
지리공간 추적기가 실행되고 있지 않습니다.
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
공간 추적기가 실행 중이며 사용할 수 있습니다.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
Geospatial Tracker가 초기화되지 않아 사용할 수 없습니다.
XrEventDataGeospatialTrackerStateChangedANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialTrackerStateANDROID state;
XrResult initializationResult;
XrTime time;
} XrEventDataGeospatialTrackerStateChangedANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.geospatialTracker는 상태가 변경된 XrGeospatialTrackerANDROID입니다.state은 새로운 XrGeospatialTrackerStateANDROID입니다 .state이XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID이면initializationResult이 오류 결과이고 , 그렇지 않으면XR_SUCCESS입니다 .time는 상태 변경이 발생한XrTime입니다.
지리 공간 추적기 상태가 변경되면 XrEventDataGeospatialTrackerStateChangedANDROID 구조가 전송됩니다. 애플리케이션에 유효한 XrGeospatialTrackerANDROID가 있으면 이 이벤트를 폴링해야 합니다. 추적기에서 수신한 첫 번째 이벤트에는 state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID이 있습니다 . 런타임에 결정된 시간이 지나면 상태가 XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID 또는 XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID로 변경되어야 합니다 . 이 전환에는 임의의 시간이 걸립니다. state가 XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID로 변경되면 이 추적기에서 수신한 마지막 이벤트여야 합니다. initializationResult 필드에는 오류 코드가 저장됩니다. 오류가 발생하는 데 몇 초 정도 걸릴 수 있습니다. 이 경우 애플리케이션은 추적기를 소멸해야 합니다. state이 XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID로 변경되면 이전에 생성된 모든 공간 앵커는 영구적으로 추적을 중지해야 하며 애플리케이션에 의해 소멸되어야 합니다. XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID와 XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID 사이에서 임의로 여러 번 상태가 변경될 수 있습니다.
유효한 사용 (암시적)
- XrEventDataGeospatialTrackerStateChangedANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
지리 공간 포즈
XrGeospatialPoseANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
회원 설명
eastUpSouthOrientation는 +X=East, +Y=Up, +Z=South인 좌표계를 기준으로 방향을 정의하는 XrQuaternionf입니다.latitude은 위도(도)이며 -90~+90 사이입니다.longitude은 경도(도 단위, -180~+180)입니다.altitude은 WGS84 타원체 위의 고도(미터)입니다.
XrGeospatialPoseANDROID 구조체는 WGS84 타원체를 사용하여 지구를 기준으로 한 위치와 방향을 나타냅니다.
유효한 사용 (암시적)
- XrGeospatialPoseANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
latitude은 유효한double값이어야 합니다. -
longitude은 유효한double값이어야 합니다. -
altitude은 유효한double값이어야 합니다.
XrGeospatialPoseFlagBitsANDROID 열거형은 다음과 같이 정의됩니다.
// 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 열거형은 지리공간 포즈의 플래그를 지정합니다.
플래그 비트는 다음과 같은 의미를 갖습니다.
플래그 설명
XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID- 방향 멤버에 유효한 데이터가 포함되어 있음을 나타냅니다.XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID- 위치 구성원에 유효한 데이터가 포함되어 있음을 나타냅니다.
XrGeospatialPoseFlagsANDROID 유형은 XrGeospatialPoseFlagBitsANDROID의 비트 마스크입니다 .
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
XrPosef를 지리 공간적 포즈로 변환
xrLocateGeospatialPoseFromPoseANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrLocateGeospatialPoseFromPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
XrGeospatialPoseResultANDROID* geospatialPoseResult);
매개변수 설명
geospatialTracker는 변환에 사용할 XrGeospatialTrackerANDROID입니다.locateInfo는 쿼리 매개변수가 포함된 XrGeospatialPoseFromPoseLocateInfoANDROID에 대한 포인터입니다.geospatialPoseResult는 결과를 수신하는 XrGeospatialPoseResultANDROID에 대한 포인터입니다.
xrLocateGeospatialPoseFromPoseANDROID 함수는 XrGeospatialPoseFromPoseLocateInfoANDROID :: space의 포즈를 지리 공간적 포즈로 변환합니다. geospatialTracker의 상태가 XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID이 아니면 런타임은 XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID를 반환해야 합니다 . 함수가 XR_SUCCESS를 반환하면 geospatialPoseResult의 XrGeospatialPoseResultANDROID :: poseFlags 필드가 유효한 출력 필드를 결정합니다. XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID이 XrGeospatialPoseResultANDROID :: poseFlags에 설정되지 않은 경우 애플리케이션은 XrGeospatialPoseANDROID :: latitude, XrGeospatialPoseANDROID :: longitude, XrGeospatialPoseANDROID :: altitude, XrGeospatialPoseResultANDROID :: horizontalAccuracy 또는 XrGeospatialPoseResultANDROID :: verticalAccuracy 필드를 XrGeospatialPoseResultANDROID에서 읽으면 안 됩니다(must not). XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID가 XrGeospatialPoseResultANDROID :: poseFlags에 설정되지 않은 경우 애플리케이션은 XrGeospatialPoseANDROID :: eastUpSouthOrientation 또는 XrGeospatialPoseResultANDROID :: orientationYawAccuracy를 읽으면 안 됩니다 . XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID가 설정되지 않은 경우 XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID도 설정되지 않아야 합니다.
정확도가 예상보다 낮으면 기기에서 VPS 현지화를 사용하지 않는다는 의미일 수 있습니다. 애플리케이션은 사용자에게 기기를 표지판과 건물에 향하도록 안내하여 현지화를 개선할 수 있습니다.
유효한 사용 (암시적)
- xrLocateGeospatialPoseFromPoseANDROID를 호출하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
geospatialTracker은 유효한 XrGeospatialTrackerANDROID 핸들이어야 합니다. -
locateInfo은 유효한 XrGeospatialPoseFromPoseLocateInfoANDROID 구조체에 대한 포인터여야 합니다. -
geospatialPoseResult는 XrGeospatialPoseResultANDROID 구조체에 대한 포인터여야 합니다.
반환 코드
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 구조는 다음과 같이 정의됩니다.
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.space은pose이 정의된 XrSpace입니다.time는pose를 평가할XrTime입니다 .pose는space에서 지리 공간적 포즈로 변환할 XrPosef입니다.
유효한 사용 (암시적)
- XrGeospatialPoseFromPoseLocateInfoANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
space은 유효한 XrSpace 핸들이어야 합니다.
XrGeospatialPoseResultANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrGeospatialPoseResultANDROID {
XrStructureType type;
void* next;
XrGeospatialPoseFlagsANDROID poseFlags;
XrGeospatialPoseANDROID geospatialPose;
double horizontalAccuracy;
double verticalAccuracy;
double orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.poseFlags는 포즈 구성요소의 유효성을 나타내는 XrGeospatialPoseFlagsANDROID의 비트 마스크입니다.geospatialPose는 결과 XrGeospatialPoseANDROID입니다 .horizontalAccuracy는 지리 공간 자세 위치의 추정된 수평 정확도입니다. 이는 지정된 위도와 경도 주변의 신뢰도 68% 원의 반지름(미터)으로 정의됩니다.verticalAccuracy는 지정된 고도 주변의 68% 신뢰도 거리(미터)로 정의된 지리 공간 자세 위치의 추정 수직 정확도입니다. 즉, 실제 고도가 [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy] 범위에 있을 확률은 68% 입니다.orientationYawAccuracy는 지리 공간 자세 방향의 추정된 요 정확도로, 지정된 방향을 중심으로 신뢰도 68% 의 반경(단위: 도)으로 정의됩니다.
유효한 사용 (암시적)
- XrGeospatialPoseResultANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
지리 공간적 포즈를 XrPosef로 변환
xrLocateGeospatialPoseANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrLocateGeospatialPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseLocateInfoANDROID* locateInfo,
XrSpaceLocation* location);
매개변수 설명
geospatialTracker는 변환에 사용할 XrGeospatialTrackerANDROID입니다.locateInfo는 쿼리 매개변수가 포함된 XrGeospatialPoseLocateInfoANDROID에 대한 포인터입니다.location는 결과 포즈를 수신하는 XrSpaceLocation에 대한 포인터입니다.
xrLocateGeospatialPoseANDROID 함수는 지리 공간적 포즈를 XrSpaceLocation으로 변환합니다 . XrGeospatialTrackerANDROID가 실행되고 있지 않으면 런타임은 XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID를 반환해야 합니다 . 함수가 XR_SUCCESS를 반환하면 location의 XrSpaceLocation :: locationFlags 필드가 유효한 출력 필드를 결정합니다.
유효한 사용 (암시적)
- xrLocateGeospatialPoseANDROID를 호출하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
geospatialTracker은 유효한 XrGeospatialTrackerANDROID 핸들이어야 합니다. -
locateInfo은 유효한 XrGeospatialPoseLocateInfoANDROID 구조체를 가리키는 포인터여야 합니다. -
location은 XrSpaceLocation 구조체에 대한 포인터여야 합니다.
반환 코드
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 구조는 다음과 같이 정의됩니다.
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.space은 결과 포즈가 표현될 XrSpace입니다.time은 포즈를 찾을XrTime입니다.geospatialPose는 변환할 XrGeospatialPoseANDROID입니다.
유효한 사용 (암시적)
- XrGeospatialPoseLocateInfoANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
space은 유효한 XrSpace 핸들이어야 합니다. -
geospatialPose은 유효한 XrGeospatialPoseANDROID 구조여야 합니다(must).
VPS 사용 가능 여부
XrVPSAvailabilityANDROID 열거형은 다음과 같이 정의됩니다.
typedef enum XrVPSAvailabilityANDROID {
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;
XrVPSAvailabilityANDROID 열거형은 VPS 가용성을 나타냅니다.
열거형에는 다음 값이 있습니다.
열거형 설명
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
지정된 위치 근처에서는 VPS를 사용할 수 없습니다.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
VPS를 지정된 위치 근처에서 사용할 수 있습니다.
xrCheckVpsAvailabilityAsyncANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
매개변수 설명
session는 검사에 사용할 XrSession입니다.latitude은 위도(도)입니다.longitude은 경도(도)입니다.future는 비동기 작업의 결과를 보유할XrFutureEXT에 대한 포인터입니다.
시각적 위치 서비스 (VPS) 사용 가능 여부는 VPS를 사용하여 특정 위치에서 지리 공간 정확성을 개선할 수 있는지를 나타냅니다.
xrCheckVpsAvailabilityAsyncANDROID 함수는 지정된 위치에서 VPS 사용 가능 여부를 비동기적으로 확인하기 시작합니다. 애플리케이션은 이 함수를 호출하기 위해 XrGeospatialTrackerANDROID가 필요하지 않으며 이 작업의 결과를 사용하여 생성 여부를 결정할 수 있습니다. 애플리케이션이 필수 권한을 획득하지 못한 경우 런타임은 XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다 .
유효한 사용 (암시적)
- xrCheckVpsAvailabilityAsyncANDROID를 호출하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
session은 유효한 XrSession 핸들이어야 합니다. -
latitude은 유효한double값이어야 합니다. -
longitude은 유효한double값이어야 합니다. -
future은XrFutureEXT값에 대한 포인터여야 합니다.
반환 코드
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 함수는 다음과 같이 정의됩니다.
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
매개변수 설명
session은 검사에 사용되는 XrSession입니다.future는 xrCheckVpsAvailabilityAsyncANDROID에서 반환된XrFutureEXT입니다 .completion는 결과를 수신하는 XrVPSAvailabilityCheckCompletionANDROID에 대한 포인터입니다.
유효한 사용 (암시적)
- xrCheckVpsAvailabilityCompleteANDROID를 호출하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
session은 유효한 XrSession 핸들이어야 합니다. -
completion은 XrVPSAvailabilityCheckCompletionANDROID 구조체에 대한 포인터여야 합니다(must).
반환 코드
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 구조는 다음과 같이 정의됩니다.
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.futureResult는 확인 작업의 XrResult입니다.futureResult가XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID이면next체인의 구조에서 실패에 관한 자세한 정보를 제공할 수 있습니다.availability는 결과 XrVPSAvailabilityANDROID입니다 .futureResult이XR_SUCCESS이 아닌 한 애플리케이션은 이 필드를 읽으면 안 됩니다 .
향후 반품 코드
futureResult 값:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
유효한 사용 (암시적)
- XrVPSAvailabilityCheckCompletionANDROID를 사용하기 전에
XR_ANDROID_geospatial확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
futureResult은 유효한 XrResult 값이어야 합니다. -
availability은(는) 유효한 XrVPSAvailabilityANDROID 값이어야 합니다.
예
지리 공간 추적기 설정
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 호출
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.
}
새 객체 유형
새 명령어
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
새 구조
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
XrSystemProperties 확장 :
새 열거형
새 비트 마스크
새 열거형 상수
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONXrObjectType 확장 :
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
XrResult 확장 :
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
XrStructureType 확장 :
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
문제
버전 기록
버전 1, 2025년 12월 18일 (벤 킹)
- 초기 확장 프로그램 설명입니다.