OpenXRInterface¶
继承: XRInterface < RefCounted < Object
OpenXR 接口。
描述¶
OpenXR 接口使 i3D 能够与 OpenXR 运行环境进行交互,并且能够实现创建 XR 体验和应用的功能。
由于 OpenXR 的需求,此接口的运作方式与其他基于插件的 XR 接口略有不同。在 i3D 启动时需要对其进行初始化。您需要启用 OpenXR,相关设置可在您的项目设置中“XR”选项下找到。您确实需要为与 XR 的交互指定一个视口,以便 i3D 能够知道应将哪个渲染结果输出到头戴设备上。
属性¶
|
||
|
||
|
||
|
||
|
||
|
方法¶
get_action_sets() const |
|
get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const |
|
BitField[HandJointFlags] |
get_hand_joint_flags(hand: Hand, joint: HandJoints) const |
get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_position(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_radius(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_rotation(hand: Hand, joint: HandJoints) const |
|
get_hand_tracking_source(hand: Hand) const |
|
get_motion_range(hand: Hand) const |
|
is_action_set_active(name: String) const |
|
is_foveation_supported() const |
|
is_hand_interaction_supported() const |
|
void |
set_action_set_active(name: String, active: bool) |
void |
set_motion_range(hand: Hand, motion_range: HandMotionRange) |
信号¶
instance_exiting() 🔗
通知我们的 OpenXR 实例正在退出。
pose_recentered() 🔗
通知用户队列用户位置的重新居中。
refresh_rate_changed(refresh_rate: float) 🔗
向用户通知头戴式显示器的刷新率已发生变化。
注意: 只有在 XR 运行时支持刷新率扩展的情况下才会显示。
session_begun() 🔗
通知我们的 OpenXR 会话已经开始。
session_focussed() 🔗
通知我们的 OpenXR 会话现在获得了焦点。
session_loss_pending() 🔗
通知我们的 OpenXR 会话正处于丢失过程中。
session_stopping() 🔗
通知我们的 OpenXR 会话正在停止。
session_visible() 🔗
通知我们的 OpenXR 会话现在可见(输出正在发送到 HMD)。
枚举¶
enum Hand: 🔗
Hand HAND_LEFT = 0
左手。
Hand HAND_RIGHT = 1
右手。
Hand HAND_MAX = 2
手部枚举的最大值。
enum HandMotionRange: 🔗
HandMotionRange HAND_MOTION_RANGE_UNOBSTRUCTED = 0
全手范围,如果用户握紧双手,我们会握紧拳头。
HandMotionRange HAND_MOTION_RANGE_CONFORM_TO_CONTROLLER = 1
符合控制器,如果用户合上手,则跟踪的数据符合控制器的形状。
HandMotionRange HAND_MOTION_RANGE_MAX = 2
运动范围枚举的最大值。
enum HandTrackedSource: 🔗
HandTrackedSource HAND_TRACKED_SOURCE_UNKNOWN = 0
手部跟踪数据的来源未知(该扩展可能不受支持)。
HandTrackedSource HAND_TRACKED_SOURCE_UNOBSTRUCTED = 1
手部跟踪的来源是畅通的,这意味着使用了准确的手部跟踪方法,例如光学手部跟踪、数据手套等。
HandTrackedSource HAND_TRACKED_SOURCE_CONTROLLER = 2
手部跟踪的来源是控制器,骨骼位置是根据控制器输入推断的。
HandTrackedSource HAND_TRACKED_SOURCE_MAX = 3
手部跟踪源枚举的最大值。
enum HandJoints: 🔗
HandJoints HAND_JOINT_PALM = 0
手掌关节。
HandJoints HAND_JOINT_WRIST = 1
腕关节。
HandJoints HAND_JOINT_THUMB_METACARPAL = 2
拇指掌骨关节。
HandJoints HAND_JOINT_THUMB_PROXIMAL = 3
拇指近端关节。
HandJoints HAND_JOINT_THUMB_DISTAL = 4
拇指远端关节。
HandJoints HAND_JOINT_THUMB_TIP = 5
拇指尖关节。
HandJoints HAND_JOINT_INDEX_METACARPAL = 6
掌骨食指关节。
HandJoints HAND_JOINT_INDEX_PROXIMAL = 7
食指近端关节。
HandJoints HAND_JOINT_INDEX_INTERMEDIATE = 8
食指中间关节。
HandJoints HAND_JOINT_INDEX_DISTAL = 9
食指远端关节。
HandJoints HAND_JOINT_INDEX_TIP = 10
食指尖端关节。
HandJoints HAND_JOINT_MIDDLE_METACARPAL = 11
掌骨中指关节。
HandJoints HAND_JOINT_MIDDLE_PROXIMAL = 12
中指近端关节。
HandJoints HAND_JOINT_MIDDLE_INTERMEDIATE = 13
中指中间关节。
HandJoints HAND_JOINT_MIDDLE_DISTAL = 14
中指远端关节。
HandJoints HAND_JOINT_MIDDLE_TIP = 15
中指尖端关节。
HandJoints HAND_JOINT_RING_METACARPAL = 16
环指掌骨关节。
HandJoints HAND_JOINT_RING_PROXIMAL = 17
环指近端关节。
HandJoints HAND_JOINT_RING_INTERMEDIATE = 18
环指中间关节。
HandJoints HAND_JOINT_RING_DISTAL = 19
环指远端关节。
HandJoints HAND_JOINT_RING_TIP = 20
环指尖端关节。
HandJoints HAND_JOINT_LITTLE_METACARPAL = 21
掌骨小指关节。
HandJoints HAND_JOINT_LITTLE_PROXIMAL = 22
小指近端关节。
HandJoints HAND_JOINT_LITTLE_INTERMEDIATE = 23
小指中间关节。
HandJoints HAND_JOINT_LITTLE_DISTAL = 24
小指远端关节。
HandJoints HAND_JOINT_LITTLE_TIP = 25
小指尖端关节。
HandJoints HAND_JOINT_MAX = 26
手关节枚举的最大值。
flags HandJointFlags: 🔗
HandJointFlags HAND_JOINT_NONE = 0
没有标志被设置。
HandJointFlags HAND_JOINT_ORIENTATION_VALID = 1
如果设置,则方向数据有效;否则,方向数据不可靠,且不应被使用。
HandJointFlags HAND_JOINT_ORIENTATION_TRACKED = 2
如果设置,则方向数据来自跟踪数据;否则,该方向数据包含预测数据。
HandJointFlags HAND_JOINT_POSITION_VALID = 4
如果设置,则位置数据有效;否则,该位置数据不可靠,且不应被使用。
HandJointFlags HAND_JOINT_POSITION_TRACKED = 8
如果设置,则位置数据来自跟踪数据;否则,该位置数据包含预测数据。
HandJointFlags HAND_JOINT_LINEAR_VELOCITY_VALID = 16
如果设置,则线速度数据有效;否则,线速度数据不可靠,且不应被使用。
HandJointFlags HAND_JOINT_ANGULAR_VELOCITY_VALID = 32
如果设置,则角速度数据是有效的;否则,角速度数据不可靠,且不应被使用。
属性说明¶
float display_refresh_rate = 0.0 🔗
当前 HMD 的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会有效。
bool foveation_dynamic = false 🔗
启用动态注视点调整功能后,必须先初始化接口才能使用此功能。启用后,注视点的调整将自动在低和 foveation_level 之间进行。
注意: 仅适用于兼容渲染器。
将注视点显示级别从 0(关闭)调整至 3(高),在进行此操作之前必须先初始化该界面。
注意: 仅适用于兼容渲染器。
float render_target_size_multiplier = 1.0 🔗
当前 HMD 的渲染大小乘数。必须在接触初始化之前设置。
如果将虚拟现实系统(VRS)用作屏幕尺寸的百分比,那么在焦点点周围能保证最佳质量的最小半径范围。
注意: 仅适用于移动和 Forward+ 渲染器。要求 Viewport.vrs_mode 被设置为 Viewport.VRS_XR 。
用于计算 VRS 密度图的强度值。该值越大,VRS 效果就越明显。这样做能提高性能,但会牺牲一定的质量。
注意: 仅适用于移动和 Forward+ 渲染器。要求 Viewport.vrs_mode 被设置为 Viewport.VRS_XR 。
方法说明¶
Array get_action_sets() const 🔗
返回向 i3D 注册的动作集的列表(在运行时从动作映射加载)。
Array get_available_display_refresh_rates() const 🔗
返回当前 HMD 支持的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会返回。
Vector3 get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_angular_velocity()。
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的角速度。这是相对于 XROrigin 而言的!
BitField[HandJointFlags] get_hand_joint_flags(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_flags()。
如果启用了手动跟踪,则返回通知我们跟踪数据有效性的标志。
Vector3 get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_linear_velocity()。
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的线速度。这是相对于没有应用世界尺度的 XROrigin 而言的!
Vector3 get_hand_joint_position(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_transform()。
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的位置。这是相对于没有应用世界尺度的 XROrigin 而言的!
float get_hand_joint_radius(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_radius()。
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的半径。这是没有应用世界尺度的情况!
Quaternion get_hand_joint_rotation(hand: Hand, joint: HandJoints) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.get_hand_joint_transform()。
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的旋转。
HandTrackedSource get_hand_tracking_source(hand: Hand) const 🔗
已弃用: 请改用从 XRServer.get_tracker() 获取的 XRHandTracker.hand_tracking_source。
如果启用了手部跟踪并且支持手部跟踪源,则获取 hand 的手部跟踪数据源。
HandMotionRange get_motion_range(hand: Hand) const 🔗
如果启用了手部跟踪并且支持运动范围,则获取 hand 当前配置的运动范围。
bool is_action_set_active(name: String) const 🔗
如果给定的动作集处于活动状态,则返回 true。
bool is_eye_gaze_interaction_supported() 🔗
返回眼球跟踪交互扩展的相应功能。
注意: 只有在 OpenXR 完成初始化之后,此操作才会返回有效值。
bool is_foveation_supported() const 🔗
如果 OpenXR 的聚焦扩展功能被支持,则返回 true 。在此返回有效值之前,必须先初始化该接口。
注意: 此功能仅在兼容渲染器中可用,并且目前仅在部分独立耳机中可用。对于 Vulkan 设置:在桌面环境中,请将 Viewport.vrs_mode 设置为 VRS_XR 。
bool is_hand_interaction_supported() const 🔗
如果 OpenXR 的手部交互规范得到支持并已启用,则返回 true 。
注意: 该函数仅在 OpenXR 已完成初始化后才会返回有效值。
bool is_hand_tracking_supported() 🔗
如果 OpenXR 的手部跟踪功能已支持并已启用,则返回 true 。
注意: 只有在 OpenXR 完成初始化之后,此操作才会返回有效值。
void set_action_set_active(name: String, active: bool) 🔗
将给定的动作集设置为活动或非活动。
void set_motion_range(hand: Hand, motion_range: HandMotionRange) 🔗
如果启用了手部跟踪并且支持运动范围,请将 hand 当前配置的运动范围设置为 motion_range。