Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
OpenXRInterface
继承: XRInterface < RefCounted < Object
OpenXR 接口。
描述
OpenXR 接口允许 Godot 与 OpenXR 运行时进行交互,并使创建 XR 体验和游戏成为可能。
由于 OpenXR 的需要,该接口的工作方式与其他基于插件的 XR 接口略有不同。它需要在 Godot 启动时被初始化。若需要启用 OpenXR,相关设置可以在游戏项目设置中的 XR 标题下找到。你确实需要标记一个视口以与 XR 一起使用,以便 Godot 知道应该将哪个渲染结果输出到头戴式设备。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
方法
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) 🔗
通知用户 HMD 刷新率发生了变化。
注意:仅在 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 用作屏幕大小的百分比,则焦点周围可保证完全质量的最小半径。
注意:仅限 Mobile 和 Forward+ 渲染器。需要将 Viewport.vrs_mode 设置为 Viewport.VRS_XR。
用于计算 VRS 密度图的强度。该值越大,VRS 越明显。这会以牺牲质量为代价来提高性能。
注意:仅限 Mobile 和 Forward+ 渲染器。需要将 Viewport.vrs_mode 设置为 Viewport.VRS_XR。
方法说明
Array get_action_sets() const 🔗
返回向 Godot 注册的动作集的列表(在运行时从动作映射加载)。
Array get_available_display_refresh_rates() const 🔗
返回当前 HMD 支持的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会返回。
Vector3 get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_angular_velocity() obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand
)的关节(joint
)的角速度。这是相对于 XROrigin3D 而言的!
BitField[HandJointFlags] get_hand_joint_flags(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_flags() obtained from XRServer.get_tracker() instead.
如果启用了手动跟踪,则返回通知我们跟踪数据有效性的标志。
Vector3 get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_linear_velocity() obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand
)的关节(joint
)的线速度。这是相对于没有应用世界尺度的 XROrigin3D 而言的!
Vector3 get_hand_joint_position(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand
)的关节(joint
)的位置。这是相对于没有应用世界尺度的 XROrigin3D 而言的!
float get_hand_joint_radius(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_radius() obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand
)的关节(joint
)的半径。这是没有应用世界尺度的情况!
Quaternion get_hand_joint_rotation(hand: Hand, joint: HandJoints) const 🔗
已弃用: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪,则返回 OpenXR 提供的手(hand
)的关节(joint
)的旋转。
HandTrackedSource get_hand_tracking_source(hand: Hand) const 🔗
已弃用: Use XRHandTracker.hand_tracking_source obtained from XRServer.get_tracker() instead.
如果启用了手部跟踪并且支持手部跟踪源,则获取 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
。