Camera

Inherits: Spatial < Node < Object

Inherited By: ARVRCamera, ClippedCamera, InterpolatedCamera

相机节点,会从某个角度进行显示。

描述

相机是一个特殊节点,用于显示从其当前位置可见的内容。相机在最近的 Viewport 节点中注册自己(当树上行)。每个视窗只能激活一个相机。如果在树上没有可用的视窗,相机将在全局视窗中注册。换句话说,相机只是为 Viewport 提供3D显示能力,如果没有,则无法显示在该 Viewport 或更高视窗中注册的场景。

教程

属性

int

cull_mask

1048575

bool

current

false

DopplerTracking

doppler_tracking

0

Environment

environment

float

far

100.0

float

fov

70.0

Vector2

frustum_offset

Vector2( 0, 0 )

float

h_offset

0.0

KeepAspect

keep_aspect

1

float

near

0.05

Projection

projection

0

float

size

1.0

float

v_offset

0.0

方法

void

clear_current ( bool enable_next=true )

RID

get_camera_rid ( ) const

Transform

get_camera_transform ( ) const

bool

get_cull_mask_bit ( int layer ) const

Array

get_frustum ( ) const

bool

is_position_behind ( Vector3 world_point ) const

void

make_current ( )

Vector3

project_local_ray_normal ( Vector2 screen_point ) const

Vector3

project_position ( Vector2 screen_point, float z_depth ) const

Vector3

project_ray_normal ( Vector2 screen_point ) const

Vector3

project_ray_origin ( Vector2 screen_point ) const

void

set_cull_mask_bit ( int layer, bool enable )

void

set_frustum ( float size, Vector2 offset, float z_near, float z_far )

void

set_orthogonal ( float size, float z_near, float z_far )

void

set_perspective ( float fov, float z_near, float z_far )

Vector2

unproject_position ( Vector3 world_point ) const

枚举

enum Projection:

  • PROJECTION_PERSPECTIVE = 0 —- 透视投影。物体距离相机屏幕越远显示就越小。

  • PROJECTION_ORTHOGONAL = 1 —- 正交投影,又称正交投影。物体无论距离多远,在屏幕上都保持相同的大小。

  • PROJECTION_FRUSTUM = 2 —- Frustum投影。通过该模式可以调整frustum_offset来创建 “tilted frustum “效果。


enum KeepAspect:

  • KEEP_WIDTH = 0 —- 保留水平长宽比,也称为Vert-缩放。这通常是在纵向模式下运行的项目的最佳选择,因为较高的纵横比将从更宽的垂直视场中受益。

  • KEEP_HEIGHT = 1 —- 保留垂直长宽比,也称为 Hor+ 缩放。这通常是在横向模式下运行的项目的最佳选择,因为较宽的纵横比会自动从较宽的水平视场中受益。


enum DopplerTracking:

  • DOPPLER_TRACKING_DISABLED = 0 —- 禁用多普勒效应模拟(默认)。

  • DOPPLER_TRACKING_IDLE_STEP = 1 —- Simulate Doppler effect by tracking positions of objects that are changed in _process. Changes in the relative velocity of this camera compared to those objects affect how audio is perceived (changing the audio’s AudioStreamPlayer3D.pitch_scale).

  • DOPPLER_TRACKING_PHYSICS_STEP = 2 —- Simulate Doppler effect by tracking positions of objects that are changed in _physics_process. Changes in the relative velocity of this camera compared to those objects affect how audio is perceived (changing the audio’s AudioStreamPlayer3D.pitch_scale).

属性说明

Default

1048575

Setter

set_cull_mask(value)

Getter

get_cull_mask()

描述此相机渲染哪些 3D 渲染层的剔除掩码。


Default

false

Setter

set_current(value)

Getter

is_current()

如果true,则说明祖级的Viewport当前正在使用这个摄像头。


Default

0

Setter

set_doppler_tracking(value)

Getter

get_doppler_tracking()

如果不是DOPPLER_TRACKING_DISABLED,此相机将模拟多普勒效果的对象在特定_process方法中的变化。多普勒效果只对AudioStreamPlayer3D.doppler_tracking设置为AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED以外的值的AudioStreamPlayer3D节点进行模拟。

注意:要在编辑器中切换多普勒效果预览,使用三维视窗左上角的透视菜单,并切换为启用多普勒


Setter

set_environment(value)

Getter

get_environment()

此相机要使用的Environment


Default

100.0

Setter

set_zfar(value)

Getter

get_zfar()

该相机相对于其本地Z轴的远裁边界的距离。


Default

70.0

Setter

set_fov(value)

Getter

get_fov()

相机的视野角度,以度为单位。仅适用于透视模式。由于 keep_aspect 锁定一个轴,因此 fov 设置另一个轴的视角。

作为参考,默认的垂直视野值 (70.0) 等效于以下水平 FOV:

  • 在 4:3 视窗中约86.07 度

  • 在 16:10 视窗中约 96.50 度

  • 在 16:9 视窗中约102.45 度

  • 在 21:9 视窗中约117.06 度


Default

Vector2( 0, 0 )

Setter

set_frustum_offset(value)

Getter

get_frustum_offset()

相机的机身偏移。可以更改默认值,以创建 “倾斜frustum “效果,如Y-shearing


Default

0.0

Setter

set_h_offset(value)

Getter

get_h_offset()

相机视窗的水平(X)偏移量。


Default

1

Setter

set_keep_aspect_mode(value)

Getter

get_keep_aspect_mode()

fov/size调整时要锁定的轴。可以是KEEP_WIDTHKEEP_HEIGHT


Default

0.05

Setter

set_znear(value)

Getter

get_znear()

该相机相对于其本地Z轴到近裁边界的距离。


Default

0

Setter

set_projection(value)

Getter

get_projection()

相机的投影模式。在PROJECTION_PERSPECTIVE模式下,物体与相机局部空间的Z距离会影响其感知的大小。


Default

1.0

Setter

set_size(value)

Getter

get_size()

相机的尺寸,以1/2的宽度或高度测量。仅适用于正交模式。由于keep_aspect锁定在轴上,因此size设置其他轴的尺寸长度。


Default

0.0

Setter

set_v_offset(value)

Getter

get_v_offset()

相机视窗的垂直(Y)偏移量。

方法说明

  • void clear_current ( bool enable_next=true )

如果这是当前相机,则将其从当前相机中移除。如果enable_nexttrue,请求使下一个相机成为当前相机(如果有)。


  • RID get_camera_rid ( ) const

VisualServer 返回相机的 RID。


返回相机的变换加上垂直v_offset和水平h_offset的偏移量;以及由子类相机如ClippedCameraInterpolatedCameraARVRCamera对相机的位置和方向做出的任何其他调整。


  • bool get_cull_mask_bit ( int layer ) const

如果cull_mask中给定的layer被启用,返回true,否则返回false


  • Array get_frustum ( ) const

以世界空间单位将相机的视锥平面作为 Plane 数组按以下顺序返回:near、far、left、top、right、bottom。不要与 frustum_offset 混淆。


如果给定的位置在相机后面,返回true

注意: 返回false的位置可能仍然在相机的视野之外。


  • void make_current ( )

使此相机成为Viewport的当前相机(见类的说明)。如果相机节点在场景树之外,一旦添加,它将尝试成为当前相机。


返回从屏幕点位置沿相机方向的法向量。正交相机会被归一化。透视相机考虑到透视、屏幕宽度/高度等因素。


返回世界空间中的 3D 点,该点映射到平面上 Viewport 矩形中的给定 2D 坐标,该平面距离相机的场景为给定的 z_depth 距离。


返回世界空间中的法线向量,即相机投影在Viewport矩形上投影一个点的结果。这对于以原点、法线,投射光线形式用于对象相交或拾取很有用。


返回世界空间中的 3D 坐标,即相机投影在 Viewport 矩形上投影一个点的结果。这对于以原点、法线,投射光线形式用于对象相交或拾取很有用。


  • void set_cull_mask_bit ( int layer, bool enable )

启用或禁用cull_mask中给定的layer


通过指定大小 size 、偏移量 offset 以及以世界空间为单位的 z_nearz_far 裁剪平面,将相机投影设置为视锥模式(请参阅 PROJECTION_FRUSTUM)。


通过在世界空间单位中指定 sizez_nearz_far 剪裁平面,将相机投影设置为正交模式,请参阅 PROJECTION_ORTHOGONAL。 (提示:2D 游戏经常使用这种投影,以像素为单位指定值。)


将摄像机的投影设置为透视模式,参阅PROJECTION_PERSPECTIVE),指定fov 视野角度,单位度,以及世界空间单位的z_nearz_far裁剪平面。


返回Viewport矩形中的2D坐标,该坐标映射到世界空间中给定的3D点。

注意:当使用它来定位3D视窗上的GUI元素时,如果3D点在相机后面,请使用is_position_behind来防止它们显示。

  1. # 这个代码块是继承自Spatial的脚本的一部分。
  2. # `control`是对继承自Control的节点的引用。
  3. control.visible = not get_viewport().get_camera().is_position_behind(global_transform.origin)
  4. control.rect_position = get_viewport().get_camera().unproject_position(global_transform.origin)