名称字符串
XR_ANDROID_unbounded_reference_space
扩展类型
实例扩展
注册的扩展号
468
修订版
1
扩展和版本依赖
最后修改日期
2024-09-12
IP 状态
无已知 IP 声明。
贡献者
Spencer Quin, Google
Jared Finder, Google
Fengtao Fan, Google
Lachlan Ford, Google
Nihav Jain, Google
Levana Chen, Google
概览
此扩展允许应用创建 UNBOUNDED_ANDROID
参考空间。该参考空间使观看者能够在一个复杂的环境中自由移动,通常可以移动到距离其起始位置许多米远的地方,同时始终优化观看者附近坐标系统的稳定性。随着设备感知更多环境以构建更好的场景理解,参考空间的起点可以根据需要进行大幅调整以保持设备跟踪。
要创建 UNBOUNDED_ANDROID
参考空间,应用可以将 XrReferenceSpaceCreateInfo::referenceSpaceType 设置为 XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
并传递给 xrCreateReferenceSpace。
XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrPosef pose; // previously initialized
// Use the new reference space type in the create info struct
XrReferenceSpaceCreateInfo createInfo = {
.type = XR_REFERENCE_SPACE_CREATE_INFO;
.next = nullptr;
.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
.poseInReferenceSpace = pose;
}
XrSpace referenceSpace;
CHK_XR(xrCreateReferenceSpace(session, &createInfo, &referenceSpace));
// After usage
CHK_XR(xrDestroySpace(referenceSpace));
UNBOUNDED_ANDROID
参考空间在设备跟踪开始时建立头戴式设备的“世界锁定”起点。它与重力对齐以排除俯仰和翻滚,其中 +X 向右,+Y 向上,-Z 向前。
UNBOUNDED_ANDROID
空间在应用需要渲染超出单个 STAGE
边界的世界级内容时非常有用,例如整层楼或多层建筑。
一个 UNBOUNDED_ANDROID
空间通过随时间调整其原点来保持查看器附近的稳定性。它可以根据需要进行微小和巨大调整,以保持设备跟踪。
- 运行时不应对 XrEventDataReferenceSpaceChangePending 事件进行排队,以响应微小调整。
- 运行时应对 XrEventDataReferenceSpaceChangePending 事件进行排队,以响应大幅调整。例如,当
UNBOUNDED_ANDROID
空间中的姿态因跟踪丢失而重置,并且跟踪在世界的不连贯估计(“新地图”)上重新建立时。 - 系统不断更新其对世界的理解并调整设备跟踪。如果应用需要一个不依赖于跟踪重置的持久位置,则在这种情况下可以使用锚点。
参考空间更改事件
对于由 XrEventDataReferenceSpaceChangePending 结构定义的参数,该参数在世界变化或优化重定位事件中返回
typedef struct XrEventDataReferenceSpaceChangePending {
XrStructureType type;
const void* next;
XrSession session;
XrReferenceSpaceType referenceSpaceType;
XrTime changeTime;
XrBool32 poseValid;
XrPosef poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;
成员说明
referenceSpaceType
是XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
。changeTime
将表示XrTime
重定位完成时的时间。poseValid
将是false
,因为估计值不连贯,或者在重新连接后为true
。poseInPreviousSpace
在poseValid
为false
时将无效。
当视图、控制器或其他空间相对于 UNBOUNDED_ANDROID
空间发生跟踪丢失时,应用可以继续接收推断或最后已知位置的 position
和 orientation
值。这些推断出的姿态可以(例如)基于颈部模型更新、惯性推算或最后已知位置。应用可以假定它将继续设置 XR_SPACE_LOCATION_POSITION_VALID_BIT
和 XR_VIEW_STATE_POSITION_VALID_BIT
,但 XR_SPACE_LOCATION_POSITION_TRACKED_BIT
和 XR_VIEW_STATE_POSITION_TRACKED_BIT
可能被运行时清除,以指示位置是这样推断或最后已知的。
当跟踪恢复时,运行时可能任意重新居中原点,例如将原点移动以与观看者重合。应用可以检查从 XrEventDataReferenceSpaceChangePending 事件返回的 poseValid
值,以确定其是否准备好使用。
新对象类型
新标志类型
新枚举常量
XrReferenceSpaceType 枚举扩展了
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
新枚举
新结构
新函数
问题
版本历史
- 修订版 1,2024-09-12 (Levana Chen)
- 初始扩展说明
OpenXR™ 和 OpenXR 徽标是 The Khronos Group Inc. 拥有的商标,并在中国、欧盟、日本和英国注册为商标。