名称字符串
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 表示向前。
当应用需要渲染超出单个 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;
成员说明
referenceSpaceType
为XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
。changeTime
将表示重新本地化完成时的XrTime
。poseValid
将因断开连接而估算为false
,或在重新连接后估算为true
。- 当
poseValid
为false
时,poseInPreviousSpace
无效。
当视图、控制器或其他空间相对于 UNBOUNDED_ANDROID
空间发生跟踪丢失时,应用可以继续接收推断出的或上次已知的 position
和 orientation
值。例如,这些推断出的姿势可以基于颈部模型更新、惯性死 reckoning 或上次已知位置。应用可以假定它将继续设置 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 年 9 月 12 日(Levana Chen)
- 初始扩展程序说明