XR_ANDROID_spatial_anchor_space
Name String
XR_ANDROID_spatial_anchor_space
擴充功能類型
執行個體擴充功能
擴充功能註冊編號
796
修訂版本
1
批准狀態
未批准
擴充功能和版本依附元件
XR_EXT_spatial_anchor
上次修改日期
2025-09-15
IP 狀態
沒有已知的智慧財產權聲明。
著作人
YuSheng Chang, Google
Kyle Chen, Google
Levana Chen, Google
Nihav Jain, Google
Spencer Quin, Google
總覽
XR_EXT_spatial_anchor 擴充功能中定義的 xrCreateSpatialAnchorEXT 函式,可讓應用程式使用 XrSpatialEntityEXT 控制代碼建立空間錨點。相較之下,這項擴充功能會建立由 XrSpace 控制代碼表示的空間錨點。如果應用程式想執行下列操作,這項功能就非常實用:
- 使用 xrLocateSpaces 取得錨點的位置。
- 找出相對於錨點的其他空間。
- 使用
XR_ANDROID_anchor_sharing_export匯出錨點。 - 應用程式已放置錨點,現在只關心錨點的位置 (用於附加虛擬內容),不關心透過用於建立錨點的 XrSpatialContextEXT 發現的任何其他實體的任何其他元件,因此允許應用程式刪除空間情境。
使用這個擴充功能建立的錨點無法透過 XR_ANDROID_device_anchor_persistence 擴充功能保存,應用程式必須改用 XR_EXT_spatial_persistence_operations。如果 XrPersistedAnchorSpaceInfoANDROID :: anchor 是使用 xrCreateSpatialAnchorSpaceANDROID 或 xrCreateSpatialAnchorSpaceFromIdANDROID 建立,執行階段必須從 xrPersistAnchorANDROID 傳回 XR_ERROR_VALIDATION_FAILURE。
為空間錨點建立 XrSpace
建立空間錨點和空間
xrCreateSpatialAnchorSpaceANDROID 函式的定義如下:
XrResult xrCreateSpatialAnchorSpaceANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorCreateInfoEXT* createInfo,
XrSpatialEntityIdEXT* anchorEntityId,
XrSpace* anchorSpace);
參數說明
session是先前使用 xrCreateSession 建立的 XrSession 控制代碼spatialContext是先前使用 xrCreateSpatialContextAsyncEXT 建立的 XrSpatialContextEXT。createInfo是 XrSpatialAnchorCreateInfoEXT 的指標。anchorEntityId是指向XrSpatialEntityIdEXT的指標。anchorSpace是指向 XrSpace 的指標。
xrCreateSpatialAnchorSpaceANDROID 函式會建立錨點,輸出 XrSpatialEntityIdEXT 和 XrSpace 控制代碼。xrCreateSpatialAnchorSpaceANDROID 的驗證需求與 xrCreateSpatialAnchorEXT 相同。
如果傳遞至 xrCreateSpatialAnchorSpaceANDROID 的 XrSpatialContextEXT 未設定 XR_SPATIAL_CAPABILITY_ANCHOR_EXT,執行階段必須傳回 XR_ERROR_VALIDATION_FAILURE。
關於 xrCreateSpatialAnchorSpaceANDROID 建立的錨點可偵測性,適用 xrCreateSpatialAnchorEXT 規格的最後一段。
有效用途 (隱含)
- 呼叫 xrCreateSpatialAnchorSpaceANDROID 之前,必須啟用
XR_ANDROID_spatial_anchor_space擴充功能 -
session「必須」是有效的 XrSession 控制代碼 -
spatialContext「必須」是有效的 XrSpatialContextEXT 控制代碼 -
createInfo「必須」指向有效的 XrSpatialAnchorCreateInfoEXT 結構 -
anchorEntityId「必須」是指向XrSpatialEntityIdEXT值的指標 -
anchorSpace「必須」是指向 XrSpace 控制代碼的指標 -
spatialContext「必須」已建立、分配或從session擷取
傳回代碼
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
從現有空間錨點建立 XrSpace
xrCreateSpatialAnchorSpaceFromIdANDROID 函式的定義如下:
XrResult xrCreateSpatialAnchorSpaceFromIdANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
XrSpace* anchorSpace);
參數說明
session是先前使用 xrCreateSession 建立的 XrSession 控制代碼spatialContext是先前使用 xrCreateSpatialContextAsyncEXT 建立的 XrSpatialContextEXT。createInfo是 XrSpatialAnchorSpaceFromIdCreateInfoANDROID 的指標。anchorSpace是指向 XrSpace 的指標。
如果空間錨點實體已存在 (例如因持續性),應用程式可以提供空間實體 ID,從這些空間錨點建立 XrSpace。
xrCreateSpatialAnchorSpaceFromIdANDROID 函式會在 XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId 欄位中提供 XrSpatialEntityIdEXT,建立 XrSpace 控制代碼。
如果傳遞至 xrCreateSpatialAnchorSpaceFromIdANDROID 的 XrSpatialContextEXT 未設定 XR_SPATIAL_CAPABILITY_ANCHOR_EXT,執行階段必須傳回 XR_ERROR_VALIDATION_FAILURE。
有效用途 (隱含)
- 呼叫 xrCreateSpatialAnchorSpaceFromIdANDROID 之前,必須啟用
XR_ANDROID_spatial_anchor_space擴充功能 -
session「必須」是有效的 XrSession 控制代碼 -
spatialContext「必須」是有效的 XrSpatialContextEXT 控制代碼 -
createInfo「必須」是指向有效 XrSpatialAnchorSpaceFromIdCreateInfoANDROID 結構的指標 -
anchorSpace「必須」是指向 XrSpace 控制代碼的指標 -
spatialContext「必須」已建立、分配或從session擷取
傳回代碼
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialAnchorSpaceFromIdCreateInfoANDROID 結構定義如下:
typedef struct XrSpatialAnchorSpaceFromIdCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT anchorEntityId;
} XrSpatialAnchorSpaceFromIdCreateInfoANDROID;
成員說明
type是這個結構的 XrStructureType。next是NULL,或指向結構鏈中下一個結構的指標。anchorEntityId是現有空間錨點的XrSpatialEntityIdEXT,用於建立 XrSpace。
如果 XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId 不是 spatialContext 的有效 ID,執行階段必須傳回 XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT。
如果 XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId 不是錨點的有效實體 ID,執行階段必須傳回 XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID。
有效用途 (隱含)
- 您必須先啟用
XR_ANDROID_spatial_anchor_space擴充功能,才能使用 XrSpatialAnchorSpaceFromIdCreateInfoANDROID -
type「必須」為XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID -
next「必須」為NULL,或指向結構鏈中下一個結構的有效指標
錨定廣告生命週期
XrSpace 控制代碼的父項是 XrSession。這表示即使 xrCreateSpatialAnchorSpaceFromIdANDROID :: spatialContext 或 xrCreateSpatialAnchorSpaceANDROID :: spatialContext 遭到刪除,代表錨點的 XrSpace 控制代碼仍會有效。建立 XrSpace 來代表空間實體錨點,可讓應用程式刪除以 XR_SPATIAL_CAPABILITY_ANCHOR_EXT 設定的 XrSpatialContextEXT,同時繼續使用 XrSpace 搭配 xrLocateSpaces 取得錨點的最新姿勢,也就是說,執行階段必須繼續追蹤錨點,直到代表錨點的所有 XrSpace 控制代碼都刪除為止。
範例程式碼
建立空間錨點做為 XrSpace
以下程式碼範例說明如何建立空間錨點,並以 XrSpace 形式傳回。
XrSpatialEntityIdEXT spatialAnchorEntityId;
XrSpace spatialAnchorSpace {XR_NULL_HANDLE}; // XrSpace handle of anchor
// Spatial anchor create info
XrSpatialAnchorCreateInfoEXT createInfo{
.type = XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT,
.baseSpace = localSpace,
.time = predictedDisplayTime,
.pose = {{0, 0, 0, 1}, {1, 1, 1}},
};
// Create spatial anchor using the new API
CHK_XR(xrCreateSpatialAnchorSpaceANDROID(session, spatialContext, &createInfo, &spatialAnchorEntityId, &spatialAnchorSpace));
// ...
從錨定實體 ID 建立 XrSpace
以下程式碼範例示範如何從現有的錨點實體 ID 建立 XrSpace。
XrSpace anchorSpace = XR_NULL_HANDLE;
// Spatial anchor from XrSpace create info
XrSpatialAnchorSpaceFromIdCreateInfoANDROID createInfoFromId{
.type = XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID,
.anchorEntityId = spatialAnchorEntityId,
};
// Create XrSpace handle from spatial anchor ID
CHK_XR(xrCreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, &createInfoFromId, &anchorSpace));
// ...
新指令
新結構
新列舉常數
XR_ANDROID_SPATIAL_ANCHOR_SPACE_EXTENSION_NAMEXR_ANDROID_spatial_anchor_space_SPEC_VERSION擴充 XrResult:
XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID
擴充 XrStructureType:
XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID
問題
版本記錄
修訂版本 1,2025 年 9 月 15 日 (YuSheng Chang、Kyle Chen)
- 初始擴充功能說明。