Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

OpenXRInterface

继承: XRInterface < RefCounted < Object

OpenXR 接口。

描述

OpenXR 接口允许 Godot 与 OpenXR 运行时进行交互,并使创建 XR 体验和游戏成为可能。

由于 OpenXR 的需要,该接口的工作方式与其他基于插件的 XR 接口略有不同。它需要在 Godot 启动时被初始化。若需要启用 OpenXR,相关设置可以在游戏项目设置中的 XR 标题下找到。你确实需要标记一个视口以与 XR 一起使用,以便 Godot 知道应该将哪个渲染结果输出到头戴式设备。

教程

属性

float

display_refresh_rate

0.0

bool

foveation_dynamic

false

int

foveation_level

0

float

render_target_size_multiplier

1.0

方法

Array

get_action_sets ( ) const

Array

get_available_display_refresh_rates ( ) const

Vector3

get_hand_joint_angular_velocity ( Hand hand, HandJoints joint ) const

BitField<HandJointFlags>

get_hand_joint_flags ( Hand hand, HandJoints joint ) const

Vector3

get_hand_joint_linear_velocity ( Hand hand, HandJoints joint ) const

Vector3

get_hand_joint_position ( Hand hand, HandJoints joint ) const

float

get_hand_joint_radius ( Hand hand, HandJoints joint ) const

Quaternion

get_hand_joint_rotation ( Hand hand, HandJoints joint ) const

HandMotionRange

get_motion_range ( Hand hand ) const

bool

is_action_set_active ( String name ) const

bool

is_eye_gaze_interaction_supported ( )

bool

is_foveation_supported ( ) const

bool

is_hand_tracking_supported ( )

void

set_action_set_active ( String name, bool active )

void

set_motion_range ( Hand hand, HandMotionRange motion_range )


信号

pose_recentered ( )

通知用户队列玩家位置的重新居中。


session_begun ( )

通知我们的 OpenXR 会话已经开始。


session_focussed ( )

通知我们的 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 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

  • void set_display_refresh_rate ( float value )

  • float get_display_refresh_rate ( )

当前 HMD 的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会有效。


bool foveation_dynamic = false

  • void set_foveation_dynamic ( bool value )

  • bool get_foveation_dynamic ( )

启用动态注视点调整,必须先初始化接口才能访问该功能。如果启用,注视点将在低和 foveation_level 之间自动调整。


int foveation_level = 0

  • void set_foveation_level ( int value )

  • int get_foveation_level ( )

将注视点级别设置为从 0(关闭)到 3(高),必须先初始化接口,然后才能访问该接口。


float render_target_size_multiplier = 1.0

  • void set_render_target_size_multiplier ( float value )

  • float get_render_target_size_multiplier ( )

当前 HMD 的渲染大小乘数。必须在接触初始化之前设置。


方法说明

Array get_action_sets ( ) const

返回向 Godot 注册的动作集的列表(在运行时从动作映射加载)。


Array get_available_display_refresh_rates ( ) const

返回当前 HMD 支持的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会返回。


Vector3 get_hand_joint_angular_velocity ( Hand hand, HandJoints joint ) const

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的角速度。这是相对于 XROrigin3D 而言的!


BitField<HandJointFlags> get_hand_joint_flags ( Hand hand, HandJoints joint ) const

如果启用了手动跟踪,则返回通知我们跟踪数据有效性的标志。


Vector3 get_hand_joint_linear_velocity ( Hand hand, HandJoints joint ) const

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的线速度。这是相对于没有应用世界尺度的 XROrigin3D 而言的!


Vector3 get_hand_joint_position ( Hand hand, HandJoints joint ) const

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的位置。这是相对于没有应用世界尺度的 XROrigin3D 而言的!


float get_hand_joint_radius ( Hand hand, HandJoints joint ) const

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的半径。这是没有应用世界尺度的情况!


Quaternion get_hand_joint_rotation ( Hand hand, HandJoints joint ) const

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的旋转。


HandMotionRange get_motion_range ( Hand hand ) const

如果启用了手部跟踪并且支持运动范围,则获取 hand 当前配置的运动范围。


bool is_action_set_active ( String name ) 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_tracking_supported ( )

如果支持且已启用 OpenXR 的手部跟踪,则返回 true

注意:这仅在 OpenXR 已被初始化后返回一个有效值。


void set_action_set_active ( String name, bool active )

将给定的动作集设置为活动或非活动。


void set_motion_range ( Hand hand, HandMotionRange motion_range )

如果启用了手部跟踪并且支持运动范围,请将 hand 当前配置的运动范围设置为 motion_range