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

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;

成员说明

  • referenceSpaceTypeXR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
  • changeTime 将表示 XrTime 重定位完成时的时间。
  • poseValid 将是 false,因为估计值不连贯,或者在重新连接后为 true
  • poseInPreviousSpaceposeValidfalse 时将无效。

当视图、控制器或其他空间相对于 UNBOUNDED_ANDROID 空间发生跟踪丢失时,应用可以继续接收推断或最后已知位置的 positionorientation 值。这些推断出的姿态可以(例如)基于颈部模型更新、惯性推算或最后已知位置。应用可以假定它将继续设置 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-09-12 (Levana Chen)
    • 初始扩展说明

OpenXR™ 和 OpenXR 徽标是 The Khronos Group Inc. 拥有的商标,并在中国、欧盟、日本和英国注册为商标。