Camera3D
Узел камеры, отображает точку обзора.
Узел камеры, отображает точку обзора.
Camera3D — это специальный узел, который отображает то, что видно из его текущего местоположения. Камеры регистрируются в ближайшем узле Viewport (при подъеме по дереву). Только одна камера может быть активна для каждого viewport. Если viewport не доступен при подъеме по дереву, камера зарегистрируется в глобальном viewport. Другими словами, камера просто предоставляет возможности 3D-отображения для Viewport, и без него сцена, зарегистрированная в этом Viewport (или в более высоких viewport), не может быть отображена.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
Camera3DКонструктор
public Camera3D();Свойства15
AttributesСвойство
public CameraAttributes Attributes { get; set; }CameraAttributes для использования с этой камерой.
CompositorСвойство
public Compositor Compositor { get; set; }Compositor, который будет использоваться для этой камеры.
CullMaskСвойство
public uint CullMask { get; set; }Маска отбраковки, описывающая, какие VisualInstance3D.Layers визуализируются этой камерой. По умолчанию визуализируются все 20 видимых пользователю слоев.
Примечание: Поскольку Camera3D.CullMask позволяет хранить в общей сложности 32 слоя, есть еще 12 слоев, которые используются только внутренне движком и не отображаются в редакторе. Установка Camera3D.CullMask с помощью скрипта позволяет переключать эти зарезервированные слои, что может быть полезно для плагинов редактора.
Чтобы упростить настройку Camera3D.CullMask с помощью скрипта, используйте Camera3D.GetCullMaskValue и Camera3D.SetCullMaskValue.
Примечание: VoxelGI, SDFGI и LightmapGI всегда будут учитывать все слои, чтобы определить, что влияет на глобальное освещение. Если это проблема, установите GeometryInstance3D.GIMode на GeometryInstance3D.GIModeEnum.Disabled для сеток и Light3D.LightBakeMode на Light3D.BakeMode.Disabled для источников света, чтобы исключить их из глобального освещения.
CurrentСвойство
public bool Current { get; set; }Если true, предок Viewport в данный момент использует эту камеру.
Если в сцене несколько камер, одна из них всегда будет текущей. Например, если в сцене присутствуют два узла Camera3D и только один из них является текущим, установка Camera3D.Current одной камеры на false приведет к тому, что другая камера станет текущей.
DopplerTrackingСвойство
public Camera3D.DopplerTrackingEnum DopplerTracking { get; set; }Если не задано Camera3D.DopplerTrackingEnum.Disabled, эта камера будет имитировать эффект Доплера для объектов, изменённых с помощью определённых методов _process.
Примечание: Эффект Доплера будет слышен на AudioStreamPlayer3D только в том случае, если AudioStreamPlayer3D.DopplerTracking не задано как AudioStreamPlayer3D.DopplerTrackingEnum.Disabled.
EnvironmentСвойство
public Environment Environment { get; set; }Локальное переопределение окружения этой камеры с приоритетом над WorldEnvironment. null снимает override и возвращает выбор окружения мира. Если изменения WorldEnvironment не видны, сначала проверьте это свойство активной камеры.
FarСвойство
public float Far { get; set; }Расстояние до дальней плоскости отсечения камеры. Не используйте raw_depth*Far как универсальную формулу расстояния: перспективная глубина нелинейна и в текущем рендере использует reverse-Z. В примере расстояние восстанавливается обратной матрицей проекции с делением на W.
FovСвойство
public float Fov { get; set; }Поле обзора камеры (также известное как FOV) в качестве угла в градусах. Применяется только в режиме зрения. Camera3D.KeepAspect Заблокировать одну ось, это значение устанавливает поле обзора на другую ось.
Для ссылки - угол по умолчанию для вертикального FOV (75.0) эквивалентно горизонтальному FOV:
- ~91,31 градуса в 4:3 просмотра
- ~101,67 градуса в 16:10
- ~107,51 градуса в 16:9 смотровой порт
- ~121,63 градуса в 21:9 просмотра
FrustumOffsetСвойство
public Vector2 FrustumOffset { get; set; }Смещение фрустума (frustum) камеры. Его можно изменить со значения по умолчанию, чтобы создать эффекты «наклонного фрустума», такие как Y-shearing.
Примечание: Действует только если Camera3D.Projection равна Camera3D.ProjectionType.Frustum.
HOffsetСвойство
public float HOffset { get; set; }Горизонтальное (X) смещение области просмотра камеры.
KeepAspectСвойство
public Camera3D.KeepAspectEnum KeepAspect { get; set; }Ось для блокировки во время настроек Camera3D.Fov/Camera3D.Size. Может быть либо Camera3D.KeepAspectEnum.Width, либо Camera3D.KeepAspectEnum.Height.
NearСвойство
public float Near { get; set; }Расстояние до ближней плоскости отсечения камеры в единицах мира. Это не исходное значение depth_texture. В проверенном spatial-примере INV_PROJECTION_MATRIX восстанавливает расстояния поверхностей после изменения Near вместе с Far; raw depth при этом меняется.
ProjectionСвойство
public Camera3D.ProjectionType Projection { get; set; }Тип проекции камеры. Perspective использует перспективную проекцию с Fov; Orthogonal — ортографическую с Size; Frustum задаёт смещённый фрустум. Проверенный пример реконструирует глубину в Perspective и Orthogonal через актуальную INV_PROJECTION_MATRIX. Frustum не включён в эту проверку.
SizeСвойство
public float Size { get; set; }Размер области Orthogonal/Frustum-проекции в единицах мира; соответствующая ширина или высота зависит от KeepAspect. Это не расстояние до поверхности. Контрольные плоскости в ортографическом примере сохраняют восстановленную глубину при изменении Size и соответствующем пересчёте их положения в кадре.
VOffsetСвойство
public float VOffset { get; set; }Вертикальное (Y) смещение области просмотра камеры.
Методы49
ClearCurrentvoid
public void ClearCurrent(bool enableNext = true);Если это текущая камера, удалить ее из списка текущих. Если enable_next равен true, запросить сделать текущей следующую камеру, если таковая имеется.
| Имя | Тип | По умолчанию |
|---|---|---|
enableNext | bool | true |
GetAttributesCameraAttributes
public CameraAttributes GetAttributes();CameraAttributesGetCameraProjectionProjection
public Projection GetCameraProjection();Возвращает проекционную матрицу, которую эта камера использует для рендеринга в связанном с ней окне просмотра. Для работы камера должна быть частью дерева сцены.
ProjectionGetCameraRidRid
public Rid GetCameraRid();Возвращает RID камеры из RenderingServer.
RidGetCameraTransformTransform3D
public Transform3D GetCameraTransform();Возвращает преобразование камеры плюс вертикальное (Camera3D.VOffset) и горизонтальное (Camera3D.HOffset) смещения; и любые другие корректировки, внесенные в положение и ориентацию камеры подклассами камер, такими как XRCamera3D.
Transform3DGetCompositorCompositor
public Compositor GetCompositor();CompositorGetCullMaskuint
public uint GetCullMask();uintGetCullMaskValuebool
public bool GetCullMaskValue(int layerNumber);Возвращает, включен ли указанный слой Camera3D.CullMask, учитывая layer_number от 1 до 20.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetDopplerTrackingCamera3D.DopplerTrackingEnum
public Camera3D.DopplerTrackingEnum GetDopplerTracking();Camera3D.DopplerTrackingEnumGetEnvironmentEnvironment
public Environment GetEnvironment();EnvironmentGetFarfloat
public float GetFar();floatGetFovfloat
public float GetFov();floatGetFrustumReckfell.Collections.Array<Plane>
public Reckfell.Collections.Array<Plane> GetFrustum();Возвращает плоскости усеченной пирамиды камеры в единицах мирового пространства как массив Plane в следующем порядке: ближний, дальний, левый, верхний, правый, нижний. Не путать с Camera3D.FrustumOffset.
Reckfell.Collections.Array<Plane>GetFrustumOffsetVector2
public Vector2 GetFrustumOffset();Vector2GetHOffsetfloat
public float GetHOffset();floatGetKeepAspectModeCamera3D.KeepAspectEnum
public Camera3D.KeepAspectEnum GetKeepAspectMode();Camera3D.KeepAspectEnumGetNearfloat
public float GetNear();floatGetProjectionCamera3D.ProjectionType
public Camera3D.ProjectionType GetProjection();Camera3D.ProjectionTypeGetPyramidShapeRidRid
public Rid GetPyramidShapeRid();Возвращает RID пирамидальной формы, охватывающей усеченную пирамиду обзора камеры, игнорируя ближнюю плоскость камеры. Верхушка пирамиды представляет положение камеры.
RidGetSizefloat
public float GetSize();floatGetVOffsetfloat
public float GetVOffset();floatIsCurrentbool
public bool IsCurrent();boolIsPositionBehindbool
public bool IsPositionBehind(Vector3 worldPoint);Проверяет, меньше ли глубина мировой точки вдоль направления камеры значения Near. Поэтому учитываются и точки между началом камеры и ближней плоскостью, а не только точки позади начала камеры. Это проверка глубины, без полного теста фрустума и перекрытия другими объектами.
| Имя | Тип | По умолчанию |
|---|---|---|
worldPoint | Vector3 | — |
boolIsPositionInFrustumbool
public bool IsPositionInFrustum(Vector3 worldPoint);Проверяет мировую точку по плоскостям фрустума камеры. Используйте камеру в дереве с настроенным viewport. Попадание во фрустум не доказывает видимость: метод не проверяет перекрытие геометрией, покрытие пикселями или слои отсечения объектов.
| Имя | Тип | По умолчанию |
|---|---|---|
worldPoint | Vector3 | — |
boolMakeCurrentvoid
public void MakeCurrent();Делает эту камеру текущей камерой для Viewport (см. описание класса). Если узел камеры находится вне дерева сцены, он попытается стать текущим после добавления.
ProjectLocalRayNormalVector3
public Vector3 ProjectLocalRayNormal(Vector2 screenPoint);Возвращает нормальный вектор из точки экрана, направленный вдоль камеры. Ортогональные камеры нормализуются. Перспективные камеры учитывают перспективу, ширину/высоту экрана и т. д.
| Имя | Тип | По умолчанию |
|---|---|---|
screenPoint | Vector2 | — |
Vector3ProjectPositionVector3
public Vector3 ProjectPosition(Vector2 screenPoint, float zDepth);Возвращает трехмерную точку в мировом пространстве, которая сопоставляется с заданной двухмерной координатой в прямоугольнике Viewport на плоскости, которая находится на заданном расстоянии z_depth от камеры вглубь сцены.
| Имя | Тип | По умолчанию |
|---|---|---|
screenPoint | Vector2 | — |
zDepth | float | — |
Vector3ProjectRayNormalVector3
public Vector3 ProjectRayNormal(Vector2 screenPoint);Возвращает вектор нормали в мировом пространстве, который является результатом проецирования точки на прямоугольник Viewport обратной проекцией камеры. Это полезно для отбрасывания лучей в форме (origin, normal) для пересечения или выбора объектов.
| Имя | Тип | По умолчанию |
|---|---|---|
screenPoint | Vector2 | — |
Vector3ProjectRayOriginVector3
public Vector3 ProjectRayOrigin(Vector2 screenPoint);Возвращает 3D-позицию в мировом пространстве, которая является результатом проецирования точки на прямоугольник Viewport обратной проекцией камеры. Это полезно для отбрасывания лучей в форме (origin, normal) для пересечения или выбора объектов.
| Имя | Тип | По умолчанию |
|---|---|---|
screenPoint | Vector2 | — |
Vector3SetAttributesvoid
public void SetAttributes(CameraAttributes env);| Имя | Тип | По умолчанию |
|---|---|---|
env | CameraAttributes | — |
SetCompositorvoid
public void SetCompositor(Compositor compositor);| Имя | Тип | По умолчанию |
|---|---|---|
compositor | Compositor | — |
SetCullMaskvoid
public void SetCullMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetCullMaskValuevoid
public void SetCullMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в Camera3D.CullMask при заданном layer_number от 1 до 20.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCurrentvoid
public void SetCurrent(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetDopplerTrackingvoid
public void SetDopplerTracking(Camera3D.DopplerTrackingEnum mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | Camera3D.DopplerTrackingEnum | — |
SetEnvironmentvoid
public void SetEnvironment(Environment env);| Имя | Тип | По умолчанию |
|---|---|---|
env | Environment | — |
SetFarvoid
public void SetFar(float far);| Имя | Тип | По умолчанию |
|---|---|---|
far | float | — |
SetFovvoid
public void SetFov(float fov);| Имя | Тип | По умолчанию |
|---|---|---|
fov | float | — |
SetFrustumvoid
public void SetFrustum(float size, Vector2 offset, float zNear, float zFar);Устанавливает проекцию камеры в режим усеченного конуса (см. Camera3D.ProjectionType.Frustum), указывая Camera3D.Size, offset и плоскости отсечения z_near и z_far в единицах мирового пространства. Параметр Camera3D.Size представляет размер ближней плоскости, либо ее ширину, либо высоту в зависимости от значения Camera3D.KeepAspect. См. также Camera3D.FrustumOffset.
| Имя | Тип | По умолчанию |
|---|---|---|
size | float | — |
offset | Vector2 | — |
zNear | float | — |
zFar | float | — |
SetFrustumOffsetvoid
public void SetFrustumOffset(Vector2 offset);| Имя | Тип | По умолчанию |
|---|---|---|
offset | Vector2 | — |
SetHOffsetvoid
public void SetHOffset(float offset);| Имя | Тип | По умолчанию |
|---|---|---|
offset | float | — |
SetKeepAspectModevoid
public void SetKeepAspectMode(Camera3D.KeepAspectEnum mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | Camera3D.KeepAspectEnum | — |
SetNearvoid
public void SetNear(float near);| Имя | Тип | По умолчанию |
|---|---|---|
near | float | — |
SetOrthogonalvoid
public void SetOrthogonal(float size, float zNear, float zFar);Устанавливает проекцию камеры в ортогональный режим (см. Camera3D.ProjectionType.Orthogonal), указывая Camera3D.Size и плоскости отсечения z_near и z_far в единицах мирового пространства.
Кстати, в 3D-играх, которые выглядят как 2D, часто используется эта проекция, где Camera3D.Size указывается в пикселях.
| Имя | Тип | По умолчанию |
|---|---|---|
size | float | — |
zNear | float | — |
zFar | float | — |
SetPerspectivevoid
public void SetPerspective(float fov, float zNear, float zFar);Устанавливает проекцию камеры в режим перспективы (см. Camera3D.ProjectionType.Perspective), указывая угол Camera3D.Fov (поле зрения) в градусах, а также плоскости отсечения z_near и z_far в единицах мирового пространства.
| Имя | Тип | По умолчанию |
|---|---|---|
fov | float | — |
zNear | float | — |
zFar | float | — |
SetProjectionvoid
public void SetProjection(Camera3D.ProjectionType mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | Camera3D.ProjectionType | — |
SetSizevoid
public void SetSize(float size);| Имя | Тип | По умолчанию |
|---|---|---|
size | float | — |
SetVOffsetvoid
public void SetVOffset(float offset);| Имя | Тип | По умолчанию |
|---|---|---|
offset | float | — |
UnprojectPositionVector2
public Vector2 UnprojectPosition(Vector3 worldPoint);Возвращает 2D-координату в прямоугольнике Viewport, которая сопоставляется с заданной 3D-точкой в мировом пространстве.
Примечание: При использовании этого для позиционирования элементов GUI в 3D-окне просмотра используйте Camera3D.IsPositionBehind, чтобы предотвратить их появление, если 3D-точка находится за камерой:
| Имя | Тип | По умолчанию |
|---|---|---|
worldPoint | Vector3 | — |
Vector2Camera3D.DopplerTrackingEnum
| Значение | Описание |
|---|---|
Disabled = 0 | Отключает имитацию эффекта Доплера (по умолчанию). |
IdleStep = 1 | Имитация эффекта Доплера путем отслеживания положений объектов, которые изменяются в |
PhysicsStep = 2 | Имитация эффекта Доплера путем отслеживания положений объектов, которые изменяются в |
Camera3D.KeepAspectEnum
| Значение | Описание |
|---|---|
Height = 1 | Сохраняет вертикальное соотношение сторон; также известно как масштабирование Hor+. Обычно это лучший вариант для проектов, работающих в ландшафтном режиме, поскольку более широкие соотношения сторон автоматически выигрывают от более широкого горизонтального поля зрения (FOV). |
Width = 0 | Сохраняет горизонтальное соотношение сторон; также известно как Vert-масштабирование. Обычно это лучший вариант для проектов, работающих в портретном режиме, так как более высокие соотношения сторон выиграют от более широкого вертикального FOV. |
Camera3D.ProjectionType
| Значение | Описание |
|---|---|
Frustum = 2 | Усеченная проекция. Этот режим позволяет настраивать |
Orthogonal = 1 | Ортогональная проекция, также известная как ортографическая проекция. Объекты остаются того же размера на экране, независимо от того, как далеко они находятся. Программная деятельность |
Perspective = 0 | Перспективная проекция. Объекты на экране становятся меньше по мере их удаления. Программа |