OpenXRCompositionLayer

实验性: This class may be changed or removed in future versions.

继承: Node3D < Node < Object

派生: OpenXRCompositionLayerCylinder, OpenXRCompositionLayerEquirect, OpenXRCompositionLayerQuad

所有 OpenXR 合成层节点的父类。

描述

合成层允许 XR 合成器通过保留其质量的特殊投影,从而在头戴式设备内显示 2D 视口。这样可以在保持图层的原始分辨率的同时,渲染清晰的文本。

注意:如果 OpenXR 运行时不支持给定的合成层类型,则可以使用 ViewportTexture 生成后备网格,以模拟合成层。

属性

bool

alpha_blend

false

Vector2i

android_surface_size

Vector2i(1024, 1024)

bool

enable_hole_punch

false

SubViewport

layer_viewport

bool

protected_content

false

int

sort_order

1

Swizzle

swapchain_state_alpha_swizzle

3

Swizzle

swapchain_state_blue_swizzle

2

Color

swapchain_state_border_color

Color(0, 0, 0, 0)

Swizzle

swapchain_state_green_swizzle

1

Wrap

swapchain_state_horizontal_wrap

0

Filter

swapchain_state_mag_filter

1

float

swapchain_state_max_anisotropy

1.0

Filter

swapchain_state_min_filter

1

MipmapMode

swapchain_state_mipmap_mode

2

Swizzle

swapchain_state_red_swizzle

0

Wrap

swapchain_state_vertical_wrap

0

bool

use_android_surface

false

方法

JavaObject

get_android_surface()

Vector2

intersects_ray(origin: Vector3, direction: Vector3) const

bool

is_natively_supported() const


枚举

enum Filter: 🔗

Filter FILTER_NEAREST = 0

对纹理进行采样时执行最邻近过滤。

Filter FILTER_LINEAR = 1

对纹理进行采样时执行线性过滤。

Filter FILTER_CUBIC = 2

对纹理进行采样时执行立方过滤。


enum MipmapMode: 🔗

MipmapMode MIPMAP_MODE_DISABLED = 0

禁用 Mipmap。

注意:Mipmap 只有在兼容渲染器中能够禁用。

MipmapMode MIPMAP_MODE_NEAREST = 1

使用最接近分辨率的 mipmap。

MipmapMode MIPMAP_MODE_LINEAR = 2

使用最接近分辨率的两个 mipmap 的线性插值。


enum Wrap: 🔗

Wrap WRAP_CLAMP_TO_BORDER = 0

使用指定的边框颜色限制纹理。

Wrap WRAP_CLAMP_TO_EDGE = 1

使用边缘颜色限制纹理。

Wrap WRAP_REPEAT = 2

无限重复纹理。

Wrap WRAP_MIRRORED_REPEAT = 3

无限重复纹理,每次重复都进行镜像。

Wrap WRAP_MIRROR_CLAMP_TO_EDGE = 4

纹理会进行一次镜像,然后使用边缘颜色进行限制。

注意:该环绕模式在兼容渲染器中不可用。


enum Swizzle: 🔗

Swizzle SWIZZLE_RED = 0

将颜色通道映射为红色通道的值。

Swizzle SWIZZLE_GREEN = 1

将颜色通道映射为绿色通道的值。

Swizzle SWIZZLE_BLUE = 2

将颜色通道映射为蓝色通道的值。

Swizzle SWIZZLE_ALPHA = 3

将颜色通道映射为 Alpha 通道的值。

Swizzle SWIZZLE_ZERO = 4

将颜色通道映射为零。

Swizzle SWIZZLE_ONE = 5

将颜色通道映射为一。


属性说明

bool alpha_blend = false 🔗

  • void set_alpha_blend(value: bool)

  • bool get_alpha_blend()

启用使用其 alpha 通道混合图层的功能。

可以与 Viewport.transparent_bg 结合使用,以便为图层提供透明背景。


Vector2i android_surface_size = Vector2i(1024, 1024) 🔗

  • void set_android_surface_size(value: Vector2i)

  • Vector2i get_android_surface_size()

如果启用了 use_android_surface,则为要创建的 Android 表面的大小。


bool enable_hole_punch = false 🔗

  • void set_enable_hole_punch(value: bool)

  • bool get_enable_hole_punch()

启用一种称为“打孔”的技术,该技术允许将合成层置于主投影层后面(即将 sort_order 设置为负值),同时在 Godot 渲染的所有内容上“打一个洞”,以便该层仍然可见。

这可用于创建合成层与 Godot 渲染的所有内容存在于同一 3D 空间中的幻觉,使对象看起来既从合成层的后面又从合成层的前面经过。


SubViewport layer_viewport 🔗

合成层上渲染的 SubViewport


bool protected_content = false 🔗

  • void set_protected_content(value: bool)

  • bool is_protected_content()

If enabled, the OpenXR swapchain will be created with the XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT flag, which will protect its contents from CPU access.

When used with an Android Surface, this may allow DRM content to be presented, and will only take effect when the Surface is first created; later changes to this property will have no effect.


int sort_order = 1 🔗

  • void set_sort_order(value: int)

  • int get_sort_order()

合成层的排序顺序。数字较大的层显示在数字较小的层之前。

注意:使用回退网格时无效。


Swizzle swapchain_state_alpha_swizzle = 3 🔗

交换链状态的 Alpha 通道分量重排值。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Swizzle swapchain_state_blue_swizzle = 2 🔗

交换链状态的蓝色通道分量重排值。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Color swapchain_state_border_color = Color(0, 0, 0, 0) 🔗

  • void set_border_color(value: Color)

  • Color get_border_color()

当环绕模式为限制到边界时,使用的交换链状态的边框颜色。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Swizzle swapchain_state_green_swizzle = 1 🔗

交换链状态的绿色通道分量重排值。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Wrap swapchain_state_horizontal_wrap = 0 🔗

  • void set_horizontal_wrap(value: Wrap)

  • Wrap get_horizontal_wrap()

交换链状态的水平环绕模式。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Filter swapchain_state_mag_filter = 1 🔗

  • void set_mag_filter(value: Filter)

  • Filter get_mag_filter()

交换链状态的放大过滤器。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


float swapchain_state_max_anisotropy = 1.0 🔗

  • void set_max_anisotropy(value: float)

  • float get_max_anisotropy()

交换链状态的最大各向异性。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Filter swapchain_state_min_filter = 1 🔗

  • void set_min_filter(value: Filter)

  • Filter get_min_filter()

交换链状态的缩小过滤器。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


MipmapMode swapchain_state_mipmap_mode = 2 🔗

交换链状态的 mipmap 模式。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Swizzle swapchain_state_red_swizzle = 0 🔗

交换链状态的红色通道分量重排值。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


Wrap swapchain_state_vertical_wrap = 0 🔗

  • void set_vertical_wrap(value: Wrap)

  • Wrap get_vertical_wrap()

交换链状态的垂直环绕模式。

注意:该属性仅对支持 OpenXR XR_FB_swapchain_update_state OpenGLES/Vulkan 扩展的设备有效。


bool use_android_surface = false 🔗

  • void set_use_android_surface(value: bool)

  • bool get_use_android_surface()

如果启用,则会创建 Android 表面(大小为 android_surface_size),为合成层提供 2D 内容,不使用 layer_viewport

如何获取该表面以便应用程序在表面上进行绘制,见 get_android_surface()

注意:仅在 Android 构建上有效。


方法说明

JavaObject get_android_surface() 🔗

如果启用了 use_android_surface 并且 OpenXR 已创建 android.view.Surface,则返回代表该表面的 JavaObject。否则返回 null

注意:表面只能在活动的 OpenXR 会话中创建。因此,如果 use_android_surface 是在 OpenXR 会话外启用的,就需要等到启动全新的会话才会创建。


Vector2 intersects_ray(origin: Vector3, direction: Vector3) const 🔗

返回给定射线与合成层相交的 UV 坐标。origindirection 必须位于全局空间中。

如果射线不相交,则返回 Vector2(-1.0, -1.0)


bool is_natively_supported() const 🔗

如果 OpenXR 运行时本身支持该合成层类型,则返回 true

注意:仅在 OpenXR 会话启动后才会返回准确结果。