Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Camera3D
Успадковує: Node3D < Node < Object
Успадковано від: XRCamera3D
Вузол камери, відображає з точки зору.
Опис
Camera3D — це спеціальний вузол, який відображає те, що видно з його поточного розташування. Камери реєструються в найближчому вузлі Viewport (при підйомі дерева). На вікно перегляду може бути активна лише одна камера. Якщо вікно перегляду недоступне в дереві, камеру буде зареєстровано в глобальному іконі перегляду. Іншими словами, камера просто надає можливості 3D-відображення для Viewport, і без нього не можна відобразити сцену, зареєстровану в цьому Viewport (або вищих вікнах перегляду).
Посібники
Властивості
|
||
|
||
|
||
|
||
|
||
Vector2 |
|
|
|
||
|
||
|
||
|
||
|
||
|
Методи
void |
clear_current(enable_next: bool = true) |
Projection |
get_camera_projection() const |
RID |
get_camera_rid() const |
Transform3D |
get_camera_transform() const |
get_cull_mask_value(layer_number: int) const |
|
Array[Plane] |
get_frustum() const |
RID |
|
is_position_behind(world_point: Vector3) const |
|
is_position_in_frustum(world_point: Vector3) const |
|
void |
|
Vector3 |
project_local_ray_normal(screen_point: Vector2) const |
Vector3 |
project_position(screen_point: Vector2, z_depth: float) const |
Vector3 |
project_ray_normal(screen_point: Vector2) const |
Vector3 |
project_ray_origin(screen_point: Vector2) const |
void |
set_cull_mask_value(layer_number: int, value: bool) |
void |
set_frustum(size: float, offset: Vector2, z_near: float, z_far: float) |
void |
set_orthogonal(size: float, z_near: float, z_far: float) |
void |
set_perspective(fov: float, z_near: float, z_far: float) |
Vector2 |
unproject_position(world_point: Vector3) const |
Переліки
enum ProjectionType: 🔗
ProjectionType PROJECTION_PERSPECTIVE = 0
Перспективна проекція. Об'єкти на екрані стають меншими, коли вони знаходяться далеко.
ProjectionType PROJECTION_ORTHOGONAL = 1
Ортогональна проекція, також відома як ортографічна проекція. Об’єкти залишаються незмінного розміру на екрані незалежно від того, наскільки далеко вони знаходяться.
ProjectionType PROJECTION_FRUSTUM = 2
Усічена проекція. Цей режим дозволяє регулювати frustum_offset для створення ефектів «з нахилом усеченої точки».
enum KeepAspect: 🔗
KeepAspect KEEP_WIDTH = 0
Зберігає горизонтальне співвідношення сторін; також відомий як вертикальне масштабування. Зазвичай це найкращий варіант для проектів, що працюють у портретному режимі, оскільки більші співвідношення сторін виграють від ширшого вертикального кута зору.
KeepAspect KEEP_HEIGHT = 1
Зберігає вертикальне співвідношення сторін; також відомий як масштабування Hor+. Зазвичай це найкращий варіант для проектів, що виконуються в ландшафтному режимі, оскільки ширші співвідношення сторін автоматично виграють від ширшого горизонтального кута зору.
enum DopplerTracking: 🔗
DopplerTracking DOPPLER_TRACKING_DISABLED = 0
Вимикає моделювання ефекту Доплера (за умовчанням).
DopplerTracking DOPPLER_TRACKING_IDLE_STEP = 1
Імітуйте ефект Доплера, відстежуючи положення об’єктів, які змінено в _process. Зміни відносної швидкості цієї камери порівняно з цими об’єктами впливають на сприйняття аудіо (зміна аудіо AudioStreamPlayer3D.pitch_scale).
DopplerTracking DOPPLER_TRACKING_PHYSICS_STEP = 2
Імітуйте ефект Доплера, відстежуючи положення об’єктів, які змінюються в _physics_process. Зміни відносної швидкості цієї камери порівняно з цими об’єктами впливають на сприйняття аудіо (зміна аудіо AudioStreamPlayer3D.pitch_scale).
Описи властивостей
CameraAttributes attributes 🔗
void set_attributes(value: CameraAttributes)
CameraAttributes get_attributes()
CameraAttributes для використання цієї камери.
Compositor compositor 🔗
void set_compositor(value: Compositor)
Compositor get_compositor()
Compositor для використання з цією камерою.
Маска вибракування, яка описує, які VisualInstance3D.layers відображаються цією камерою. За замовчуванням відображаються всі 20 видимих користувачем шарів.
Примітка: Оскільки cull_mask дозволяє зберігати загалом 32 шари, є додаткові 12 шарів, які використовуються лише внутрішньо механізмом і не відображаються в редакторі. Налаштування cull_mask за допомогою сценарію дозволяє перемикати ці зарезервовані шари, що може бути корисним для плагінів редактора.
Щоб легше налаштувати cull_mask за допомогою сценарію, використовуйте get_cull_mask_value() і set_cull_mask_value().
Примітка: VoxelGI, SDFGI та LightmapGI завжди враховуватимуть усі шари, щоб визначити, що сприяє глобальному освітленню. Якщо це проблема, встановіть GeometryInstance3D.gi_mode на GeometryInstance3D.GI_MODE_DISABLED для сіток і Light3D.light_bake_mode на Light3D.BAKE_DISABLED для світильників, щоб виключити їх із глобального освітлення.
Якщо true, предок Viewport зараз використовує цю камеру.
Якщо в сцені є кілька камер, одна завжди буде поточною. Наприклад, якщо в сцені присутні два вузли Camera3D і лише один є поточним, встановлення current однієї камери на
falseзмусить іншу камеру зробити поточною.
DopplerTracking doppler_tracking = 0 🔗
void set_doppler_tracking(value: DopplerTracking)
DopplerTracking get_doppler_tracking()
Якщо не встановлено значення DOPPLER_TRACKING_DISABLED, ця камера імітуватиме ефект Доплера для об'єктів, змінених у певних методах _process.
Примітка: Ефект Доплера буде чути лише на AudioStreamPlayer3D, якщо для AudioStreamPlayer3D.doppler_tracking не встановлено значення AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED.
Environment environment 🔗
void set_environment(value: Environment)
Environment get_environment()
Environment для використання цієї камери.
Відстань до дальньої межі вибракування для цієї камери відносно її локальної осі Z. Вищі значення дозволяють камері бачити далі, тоді як зменшення far може покращити продуктивність, якщо це призводить до часткового або повного відсічення об’єктів.
Кут огляду камери (у градусах). Застосовується лише в режимі перспективи. Оскільки keep_aspect блокує одну вісь, fov встановлює кут поля зору іншої осі.
Для довідки, стандартне значення вертикального поля зору (
75.0) еквівалентно горизонтальному куту зору:
~91,31 градусів у вікні перегляду 4:3
~101,67 градусів у вікні огляду 16:10
~107,51 градусів у вікні перегляду 16:9
~121,63 градусів у вікні перегляду 21:9
Vector2 frustum_offset = Vector2(0, 0) 🔗
void set_frustum_offset(value: Vector2)
Vector2 get_frustum_offset()
Зміщення кута камери. Це можна змінити за замовчуванням, щоб створити ефекти «з нахилом усеченої точки», наприклад Y-shearing.
Примітка: Ефективно, лише якщо projection дорівнює PROJECTION_FRUSTUM.
Горизонтальне (X) зміщення вікна перегляду камери.
KeepAspect keep_aspect = 1 🔗
void set_keep_aspect_mode(value: KeepAspect)
KeepAspect get_keep_aspect_mode()
Вісь, яку потрібно зафіксувати під час коригування fov/size. Може бути KEEP_WIDTH або KEEP_HEIGHT.
Відстань до найближчої межі вибракування для цієї камери відносно її локальної осі Z. Нижчі значення дозволяють камері бачити об’єкти ближче до їх походження, ціною нижчої точності в усьому діапазоні. Значення, нижчі за замовчування, можуть призвести до збільшення Z-боротьби.
ProjectionType projection = 0 🔗
void set_projection(value: ProjectionType)
ProjectionType get_projection()
Режим проекції камери. У режимі PROJECTION_PERSPECTIVE відстань Z об’єктів від локального простору камери масштабує їх сприйманий розмір.
Розмір камери в метрах вимірюється як діаметр ширини або висоти, залежно від keep_aspect. Застосовується лише в ортогональному режимі та режимах усеченої форми.
Вертикальне (Y) зміщення вікна перегляду камери.
Описи методів
void clear_current(enable_next: bool = true) 🔗
Якщо це поточна камера, видаліть її з поточної. Якщо enable_next має значення true, вимагайте зробити поточною наступну камеру, якщо така є.
Projection get_camera_projection() const 🔗
Повертає матрицю проекції, яку ця камера використовує для візуалізації у пов’язане вікно перегляду. Для роботи камера має бути частиною дерева сцен.
RID get_camera_rid() const 🔗
Повертає RID камери з RenderingServer.
Transform3D get_camera_transform() const 🔗
Повертає трансформацію камери, а також вертикальне (v_offset) і горизонтальне (h_offset) зміщення; і будь-які інші коригування положення та орієнтації камери камерами підкласу, такими як XRCamera3D.
bool get_cull_mask_value(layer_number: int) const 🔗
Повертає, чи ввімкнено вказаний рівень cull_mask, враховуючи layer_number від 1 до 20.
Array[Plane] get_frustum() const 🔗
Повертає площини зрізу камери в одиницях світового простору як масив Planes у такому порядку: поблизу, далеко, ліворуч, зверху, справа, знизу. Не плутати з frustum_offset.
RID get_pyramid_shape_rid() 🔗
Повертає RID форми піраміди, що охоплює кут огляду камери, ігноруючи ближню площину камери. Кінчик піраміди відображає положення камери.
bool is_position_behind(world_point: Vector3) const 🔗
Повертає true, якщо вказана позиція знаходиться позаду камери (синя частина пов’язаної діаграми). Перегляньте цю діаграму, щоб отримати огляд методів запиту позиції.
Примітка: Позиція, яка повертає false, все ще може бути поза полем зору камери.
bool is_position_in_frustum(world_point: Vector3) const 🔗
Повертає true, якщо вказана позиція знаходиться всередині косої точки камери (зелена частина пов’язаної діаграми). Перегляньте цю діаграму, щоб отримати огляд методів запиту позиції.
void make_current() 🔗
Робить цю камеру поточною камерою для Viewport (див. опис класу). Якщо вузол камери знаходиться поза деревом сцени, він намагатиметься стати поточним після додавання.
Vector3 project_local_ray_normal(screen_point: Vector2) const 🔗
Повертає вектор нормалі від точки на екрані, спрямований уздовж камери. Ортогональні камери нормалізовані. Перспективні камери враховують перспективу, ширину/висоту екрана тощо.
Vector3 project_position(screen_point: Vector2, z_depth: float) const 🔗
Повертає 3D-точку у світовому просторі, яка відображає задану 2D-координату в прямокутнику Viewport на площині, що є заданою відстанню z_depth до сцени від камери.
Vector3 project_ray_normal(screen_point: Vector2) const 🔗
Повертає нормальний вектор у світовому просторі, який є результатом проектування точки на прямокутник Viewport за допомогою зворотної проекції камери. Це корисно для відкидання променів у формі (початку, нормалі) для перетину об’єктів або вибору.
Vector3 project_ray_origin(screen_point: Vector2) const 🔗
Повертає 3D-положення у світовому просторі, яке є результатом проектування точки на прямокутник Viewport за допомогою зворотної проекції камери. Це корисно для відкидання променів у формі (початку, нормалі) для перетину об’єктів або вибору.
void set_cull_mask_value(layer_number: int, value: bool) 🔗
На основі value вмикає або вимикає вказаний шар у cull_mask, враховуючи layer_number від 1 до 20.
void set_frustum(size: float, offset: Vector2, z_near: float, z_far: float) 🔗
Sets the camera projection to frustum mode (see PROJECTION_FRUSTUM), by specifying a size, an offset, and the z_near and z_far clip planes in world space units. The size parameter represents the size of the near plane, either its width or height depending on the value of keep_aspect. See also frustum_offset.
void set_orthogonal(size: float, z_near: float, z_far: float) 🔗
Встановлює проекцію камери в ортогональний режим (див. PROJECTION_ORTHOGONAL), вказуючи size, а також площини відсікання z_near та z_far в одиницях світового простору.
Як підказка, 3D-ігри, які виглядають двовимірно, часто використовують цю проекцію, де size вказується в пікселях.
void set_perspective(fov: float, z_near: float, z_far: float) 🔗
Встановлює проекцію камери в режим перспективи (див. PROJECTION_PERSPECTIVE), вказуючи fov (поле зору) кут у градусах, а z_near і z_far площини відсікання в одиницях світового простору.
Vector2 unproject_position(world_point: Vector3) const 🔗
Повертає 2D-координату в прямокутнику Viewport, який відображає задану 3D-точку у світовому просторі.
Примітка: Використовуючи це для розміщення елементів графічного інтерфейсу над вікном 3D-просмотру, використовуйте is_position_behind(), щоб запобігти їх появі, якщо 3D-точка знаходиться позаду камери:
# Цей блок коду є частиною сценарію, який успадковує від Node3D.
# `control` - це посилання на вузол, що успадковує Control.
control.visible = not get_viewport().get_camera_3d().is_position_behind(global_transform.origin)
control.position = get_viewport().get_camera_3d().unproject_position(global_transform.origin)