XR_ANDROID_unbounded_reference_space OpenXR 扩展

名称字符串

XR_ANDROID_unbounded_reference_space

扩展程序类型

实例扩展

已注册的扩展号码

468

修订版本

1

扩展程序和版本依赖项

OpenXR 1.0

上次修改日期

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 表示向前。

当应用需要渲染超出单个 STAGE 边界的世界级内容(例如建筑物的整个楼层或多个楼层)时,UNBOUNDED_ANDROID 空间非常有用。

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;

成员说明

  • referenceSpaceTypeXR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
  • changeTime 将表示重新本地化完成时的 XrTime
  • poseValid 将因断开连接而估算为 false,或在重新连接后估算为 true
  • poseValidfalse 时,poseInPreviousSpace 无效。

当视图、控制器或其他空间相对于 UNBOUNDED_ANDROID 空间发生跟踪丢失时,应用可以继续接收推断出的或上次已知的 positionorientation 值。例如,这些推断出的姿势可以基于颈部模型更新、惯性死 reckoning 或上次已知位置。应用可以假定它将继续设置 XR_SPACE_LOCATION_POSITION_VALID_BITXR_VIEW_STATE_POSITION_VALID_BIT,但运行时可能会清除 XR_SPACE_LOCATION_POSITION_TRACKED_BITXR_VIEW_STATE_POSITION_TRACKED_BIT,以指明位置是通过这种方式推断出来的或最后已知的。

恢复跟踪后,运行时可能会任意重新居中原点,例如将原点移至与观看者重合的位置。应用可以检查 XrEventDataReferenceSpaceChangePending 事件返回的 poseValid 值,以确定是否可以使用。

新的对象类型

新的标志类型

新的枚举常量

XrReferenceSpaceType 枚举已扩展为:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

新枚举

新结构

新函数

问题

版本历史记录

  • 修订版 1,2024 年 9 月 12 日(Levana Chen)
    • 初始扩展程序说明