XRInterface
继承: RefCounted < Object
派生: MobileVRInterface, OpenXRInterface, WebXRInterface, XRInterfaceExtension
XR 接口实现的基类。
描述
需要实现该类以使 Godot 可以使用 AR 或 VR 平台,并且这些应作为 C++ 模块或 GDExtension 模块实现。部分接口公开给 GDScript,因此可以检测、启用和配置 AR 或 VR 平台。
接口应该以这样一种方式编写,只要简单地启用它们就会提供一个工作设置。可以通过 XRServer 查询可用的接口。
教程
属性
| ||
| ||
| ||
|
方法
get_capabilities ( ) const | |
get_name ( ) const | |
get_play_area ( ) const | |
get_projection_for_view ( int view, float aspect, float near, float far ) | |
get_system_info ( ) | |
get_tracking_status ( ) const | |
get_transform_for_view ( int view, Transform3D cam_transform ) | |
get_view_count ( ) | |
initialize ( ) | |
is_initialized ( ) const | |
set_play_area_mode ( PlayAreaMode mode ) | |
void | stop_passthrough ( ) |
supports_play_area_mode ( PlayAreaMode mode ) | |
void | trigger_haptic_pulse ( String action_name, StringName tracker_name, float frequency, float amplitude, float duration_sec, float delay_sec ) |
void | uninitialize ( ) |
信号
play_area_changed ( int mode )
当游玩区域改变时发出。这可能是玩家重置边界、进入新的游玩区域、更改游玩区域模式、重置其头戴式设备方向,或者世界比例改变的结果。
枚举
enum Capabilities:
Capabilities XR_NONE = 0
没有 XR 功能。
Capabilities XR_MONO = 1
此接口可以与正常的渲染输出一起工作(非基于 HMD 的 AR)。
Capabilities XR_STEREO = 2
该接口支持立体渲染。
Capabilities XR_QUAD = 4
该接口支持四边形渲染(Godot 尚不支持)。
Capabilities XR_VR = 8
该接口支持 VR。
Capabilities XR_AR = 16
该接口支持 AR(视频背景和真实世界跟踪)。
Capabilities XR_EXTERNAL = 32
该接口输出至外部设备。如果使用的是主视口,则屏幕上的输出是未经修改的左眼或右眼缓冲区(如果视口大小未更改至与 get_render_target_size 相同的纵横比,则会进行拉伸)。使用单独的视口节点能够将主视口让出来做别的事情。
enum TrackingStatus:
TrackingStatus XR_NORMAL_TRACKING = 0
追踪行为符合预期。
TrackingStatus XR_EXCESSIVE_MOTION = 1
过度运动会阻碍追踪(玩家的移动速度大于追踪的速度)。
TrackingStatus XR_INSUFFICIENT_FEATURES = 2
跟踪受到功能不足的阻碍,太暗(对于基于相机的跟踪),玩家被阻碍等。
TrackingStatus XR_UNKNOWN_TRACKING = 3
我们不知道跟踪的状态,或者这个接口未提供反馈。
TrackingStatus XR_NOT_TRACKING = 4
追踪功能失效(相机未插电或被遮挡、灯塔关闭,等等)。
enum PlayAreaMode:
PlayAreaMode XR_PLAY_AREA_UNKNOWN = 0
游玩区域模式未设置或不可用。
PlayAreaMode XR_PLAY_AREA_3DOF = 1
游玩区域仅支持方向跟踪,不支持位置跟踪,区域以玩家为中心。
PlayAreaMode XR_PLAY_AREA_SITTING = 2
玩家处于坐姿,提供有限的位置跟踪,玩家周围有固定的防护。
PlayAreaMode XR_PLAY_AREA_ROOMSCALE = 3
玩家可以自由移动,提供完整的位置跟踪。
PlayAreaMode XR_PLAY_AREA_STAGE = 4
与 XR_PLAY_AREA_ROOMSCALE 相同,但是原点固定在物理空间的中心,禁用 XRServer.center_on_hmd。
enum EnvironmentBlendMode:
EnvironmentBlendMode XR_ENV_BLEND_MODE_OPAQUE = 0
不透明混合模式。通常用于 VR 设备。
EnvironmentBlendMode XR_ENV_BLEND_MODE_ADDITIVE = 1
加法混合模式。通常用于带有穿透功能的 AR 或 VR 设备。
EnvironmentBlendMode XR_ENV_BLEND_MODE_ALPHA_BLEND = 2
Alpha 混合模式。通常用于带有穿透功能的 AR 或 VR 设备。Alpha 通道控制穿透的可见程度。Alpha 为 0.0 表示穿透可见、该像素处于加法模式。Alpha 为 1.0 表示穿透不可见,该像素处于不透明模式。
属性说明
bool ar_is_anchor_detection_enabled = false
在 AR 接口上,如果启用锚点检测,则为 true
。
EnvironmentBlendMode environment_blend_mode = 0
bool set_environment_blend_mode ( EnvironmentBlendMode mode )
EnvironmentBlendMode get_environment_blend_mode ( )
指定 XR 应如何融入环境。这是特定于某些 AR 和直通设备的,其中相机图像由 XR 合成器混合。
bool interface_is_primary = false
true
如果这是个主接口。
PlayAreaMode xr_play_area_mode = 0
bool set_play_area_mode ( PlayAreaMode mode )
PlayAreaMode get_play_area_mode ( )
该接口的游玩区域模式。
方法说明
int get_camera_feed_id ( )
如果这是一个需要显示相机画面作为背景的 AR 界面,此方法返回该界面的 CameraServer 中的画面 ID。
int get_capabilities ( ) const
返回 Capabilities 标签的组合,提供关于这个接口功能的信息。
StringName get_name ( ) const
返回该接口的名称(OpenXR、OpenVR、OpenHMD、ARKit 等)。
PackedVector3Array get_play_area ( ) const
返回一个向量数组,表示映射到 XROrigin3D 点周围的虚拟空间的物理游玩区域。这些点形成一个凸多边形,可被用于对游玩区域做出反应或可视化。如果该功能不受支持或信息尚不可用,则返回一个空数组。
Projection get_projection_for_view ( int view, float aspect, float near, float far )
返回视图/眼睛的投影矩阵。
Vector2 get_render_target_size ( )
返回在VR平台应用镜头失真等内容之前渲染的中间结果的分辨率。
Array get_supported_environment_blend_modes ( )
返回支持的环境混合模式数组,见 EnvironmentBlendMode。
Dictionary get_system_info ( )
返回包含额外系统信息的 Dictionary。接口应该返回 XRRuntimeName
和 XRRuntimeVersion
,表示所使用的 XR 运行时信息。还可以额外提供关于特定接口的条目。
注意:这个信息可能只在成功调用 initialize 后可用。
TrackingStatus get_tracking_status ( ) const
如果支持,返回我们的跟踪状态。这将使你能够向用户反馈,是否存在位置跟踪的问题。
Transform3D get_transform_for_view ( int view, Transform3D cam_transform )
返回视图/眼睛的变换。
view
是视图/眼睛的索引。
cam_transform
是将设备坐标映射至场景坐标的变换,通常是当前 XROrigin3D 的 Node3D.global_transform。
int get_view_count ( )
返回该设备渲染所需的视图数量。1 代表单目平面视图,2 代表双目立体视图。
bool initialize ( )
调用它来初始化这个接口。被初始化的第一个接口被识别为主接口,它将用于渲染输出。
初始化想要使用的接口后,需要启用视口的 AR/VR 模式,并且渲染应该开始。
注意:对于任何使用 Godot 主输出的设备,例如移动 VR,必须在主视口上启用 XR 模式。
如果为处理自己输出的平台(例如 OpenVR)执行该操作,则 Godot 将只显示一只眼睛而不会在屏幕上失真。或者,可以将单独的视口节点添加到场景并在该视口上启用 AR/VR。它将被用于输出到 HMD,让你可以在主窗口中自由地做任何你喜欢的事情,例如使用单独的相机作为旁观者相机或渲染完全不同的东西。
虽然当前未使用,但可以激活其他接口。如果想跟踪来自其他平台的控制器,可能会希望这样做。但是,此时只有一个接口可以渲染到 HMD。
bool is_initialized ( ) const
如果该接口已初始化,则为 true
。
bool is_passthrough_enabled ( )
如果已启用穿透,则为 true
。
bool is_passthrough_supported ( )
如果该接口支持穿透,则为 true
。
bool set_environment_blend_mode ( EnvironmentBlendMode mode )
设置活动的环境混合模式。
mode
是从下一帧开始的 EnvironmentBlendMode。
注意:并非所有运行时都支持全部的环境混合模式,因此在启动时检查这一点很重要。例如:
func _ready():
var xr_interface: XRInterface = XRServer.find_interface("OpenXR")
if xr_interface and xr_interface.is_initialized():
var vp: Viewport = get_viewport()
vp.use_xr = true
var acceptable_modes = [ XRInterface.XR_ENV_BLEND_MODE_OPAQUE, XRInterface.XR_ENV_BLEND_MODE_ADDITIVE ]
var modes = xr_interface.get_supported_environment_blend_modes()
for mode in acceptable_modes:
if mode in modes:
xr_interface.set_environment_blend_mode(mode)
break
bool set_play_area_mode ( PlayAreaMode mode )
设置活动的游玩区域模式,如果该模式无法在这个接口中使用则返回 false
。
bool start_passthrough ( )
启动穿透,如果无法启动则会返回 false
。
注意:XR 所使用的视口必须有透明背景,否则穿透可能无法正确渲染。
void stop_passthrough ( )
停止穿透。
bool supports_play_area_mode ( PlayAreaMode mode )
请调用这个方法来查询此接口是否支持给定的游玩区域模式。
void trigger_haptic_pulse ( String action_name, StringName tracker_name, float frequency, float amplitude, float duration_sec, float delay_sec )
在与该界面相关联的设备上触发一次触觉脉冲。
action_name
是该脉冲的动作名称。
tracker_name
是可选的,可用于将脉冲引导至特定设备,前提是该设备被绑定到此触觉。
void uninitialize ( )
关闭接口。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.