Camera
Inherits: Spatial < Node < Object
Inherited By: ARVRCamera, ClippedCamera, InterpolatedCamera
相机节点,会从某个角度进行显示。
描述
相机是一个特殊节点,用于显示从其当前位置可见的内容。相机在最近的 Viewport 节点中注册自己(当树上行)。每个视窗只能激活一个相机。如果在树上没有可用的视窗,相机将在全局视窗中注册。换句话说,相机只是为 Viewport 提供3D显示能力,如果没有,则无法显示在该 Viewport 或更高视窗中注册的场景。
教程
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
方法
void | clear_current ( bool enable_next=true ) |
get_camera_rid ( ) const | |
get_camera_transform ( ) const | |
get_cull_mask_bit ( int layer ) const | |
get_frustum ( ) const | |
is_position_behind ( Vector3 world_point ) const | |
void | make_current ( ) |
project_local_ray_normal ( Vector2 screen_point ) const | |
project_position ( Vector2 screen_point, float z_depth ) const | |
project_ray_normal ( Vector2 screen_point ) const | |
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 ) |
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).
属性说明
- int cull_mask
Default |
|
Setter | set_cull_mask(value) |
Getter | get_cull_mask() |
描述此相机渲染哪些 3D 渲染层的剔除掩码。
- bool current
Default |
|
Setter | set_current(value) |
Getter | is_current() |
如果true
,则说明祖级的Viewport当前正在使用这个摄像头。
- DopplerTracking doppler_tracking
Default |
|
Setter | set_doppler_tracking(value) |
Getter | get_doppler_tracking() |
如果不是DOPPLER_TRACKING_DISABLED,此相机将模拟多普勒效果的对象在特定_process
方法中的变化。多普勒效果只对AudioStreamPlayer3D.doppler_tracking设置为AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED以外的值的AudioStreamPlayer3D节点进行模拟。
注意:要在编辑器中切换多普勒效果预览,使用三维视窗左上角的透视菜单,并切换为启用多普勒。
- Environment environment
Setter | set_environment(value) |
Getter | get_environment() |
此相机要使用的Environment。
- float far
Default |
|
Setter | set_zfar(value) |
Getter | get_zfar() |
该相机相对于其本地Z轴的远裁边界的距离。
- float fov
Default |
|
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 度
- Vector2 frustum_offset
Default |
|
Setter | set_frustum_offset(value) |
Getter | get_frustum_offset() |
相机的机身偏移。可以更改默认值,以创建 “倾斜frustum “效果,如Y-shearing。
- float h_offset
Default |
|
Setter | set_h_offset(value) |
Getter | get_h_offset() |
相机视窗的水平(X)偏移量。
- KeepAspect keep_aspect
Default |
|
Setter | set_keep_aspect_mode(value) |
Getter | get_keep_aspect_mode() |
在fov/size调整时要锁定的轴。可以是KEEP_WIDTH或KEEP_HEIGHT。
- float near
Default |
|
Setter | set_znear(value) |
Getter | get_znear() |
该相机相对于其本地Z轴到近裁边界的距离。
- Projection projection
Default |
|
Setter | set_projection(value) |
Getter | get_projection() |
相机的投影模式。在PROJECTION_PERSPECTIVE模式下,物体与相机局部空间的Z距离会影响其感知的大小。
- float size
Default |
|
Setter | set_size(value) |
Getter | get_size() |
相机的尺寸,以1/2的宽度或高度测量。仅适用于正交模式。由于keep_aspect锁定在轴上,因此size
设置其他轴的尺寸长度。
- float v_offset
Default |
|
Setter | set_v_offset(value) |
Getter | get_v_offset() |
相机视窗的垂直(Y)偏移量。
方法说明
- void clear_current ( bool enable_next=true )
如果这是当前相机,则将其从当前相机中移除。如果enable_next
是true
,请求使下一个相机成为当前相机(如果有)。
- RID get_camera_rid ( ) const
从 VisualServer 返回相机的 RID。
- Transform get_camera_transform ( ) const
返回相机的变换加上垂直v_offset和水平h_offset的偏移量;以及由子类相机如ClippedCamera、InterpolatedCamera和ARVRCamera对相机的位置和方向做出的任何其他调整。
如果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 矩形上投影一个点的结果。这对于以原点、法线,投射光线形式用于对象相交或拾取很有用。
启用或禁用cull_mask中给定的layer
。
通过指定大小 size
、偏移量 offset
以及以世界空间为单位的 z_near
和 z_far
裁剪平面,将相机投影设置为视锥模式(请参阅 PROJECTION_FRUSTUM)。
通过在世界空间单位中指定 size
和 z_near
和 z_far
剪裁平面,将相机投影设置为正交模式,请参阅 PROJECTION_ORTHOGONAL。 (提示:2D 游戏经常使用这种投影,以像素为单位指定值。)
将摄像机的投影设置为透视模式,参阅PROJECTION_PERSPECTIVE),指定fov
视野角度,单位度,以及世界空间单位的z_near
和z_far
裁剪平面。
返回Viewport矩形中的2D坐标,该坐标映射到世界空间中给定的3D点。
注意:当使用它来定位3D视窗上的GUI元素时,如果3D点在相机后面,请使用is_position_behind来防止它们显示。
# 这个代码块是继承自Spatial的脚本的一部分。
# `control`是对继承自Control的节点的引用。
control.visible = not get_viewport().get_camera().is_position_behind(global_transform.origin)
control.rect_position = get_viewport().get_camera().unproject_position(global_transform.origin)