Projection

Матрица 4×4 для трехмерных проективных преобразований.

Описание

Матрица 4×4, используемая для 3D-проективных преобразований. Она может представлять такие преобразования, как перемещение, вращение, масштабирование, сдвиг и перспективное деление. Она состоит из четырех столбцов Vector4.

Для чисто линейных преобразований (перемещение, вращение и масштабирование) рекомендуется использовать Transform3D, так как она более производительна и требует меньше памяти.

Используется внутренне как матрица проекции Camera3D.

Примечание

Существуют заметные различия при использовании данного API с C#. Подробнее см. API различия C# и GDScript.

Свойства

Vector4

w

Vector4(0, 0, 0, 1)

Vector4

x

Vector4(1, 0, 0, 0)

Vector4

y

Vector4(0, 1, 0, 0)

Vector4

z

Vector4(0, 0, 1, 0)

Конструкторы

Projection

Projection()

Projection

Projection(from: Projection)

Projection

Projection(from: Transform3D)

Projection

Projection(x_axis: Vector4, y_axis: Vector4, z_axis: Vector4, w_axis: Vector4)

Методы

Projection

create_depth_correction(flip_y: bool) static

Projection

create_fit_aabb(aabb: AABB) static

Projection

create_for_hmd(eye: int, aspect: float, intraocular_dist: float, display_width: float, display_to_lens: float, oversample: float, z_near: float, z_far: float) static

Projection

create_frustum(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static

Projection

create_frustum_aspect(size: float, aspect: float, offset: Vector2, z_near: float, z_far: float, flip_fov: bool = false) static

Projection

create_light_atlas_rect(rect: Rect2) static

Projection

create_orthogonal(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static

Projection

create_orthogonal_aspect(size: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static

Projection

create_perspective(fovy: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static

Projection

create_perspective_hmd(fovy: float, aspect: float, z_near: float, z_far: float, flip_fov: bool, eye: int, intraocular_dist: float, convergence_dist: float) static

float

determinant() const

Projection

flipped_y() const

float

get_aspect() const

Vector2

get_far_plane_half_extents() const

float

get_fov() const

float

get_fovy(fovx: float, aspect: float) static

float

get_lod_multiplier() const

int

get_pixels_per_meter(for_pixel_width: int) const

Plane

get_projection_plane(plane: int) const

Vector2

get_viewport_half_extents() const

float

get_z_far() const

float

get_z_near() const

Projection

inverse() const

bool

is_orthogonal() const

Projection

jitter_offseted(offset: Vector2) const

Projection

perspective_znear_adjusted(new_znear: float) const

Операторы

bool

operator !=(right: Projection)

Projection

operator *(right: Projection)

Vector4

operator *(right: Vector4)

bool

operator ==(right: Projection)

Vector4

operator [](index: int)


Перечисления

enum Planes: 🔗

Planes PLANE_NEAR = 0

Значение индекса ближней плоскости отсечения проекции.

Planes PLANE_FAR = 1

Значение индекса дальней плоскости отсечения проекции.

Planes PLANE_LEFT = 2

Значение индекса левой плоскости отсечения проекции.

Planes PLANE_TOP = 3

Значение индекса левой плоскости отсечения проекции.

Planes PLANE_RIGHT = 4

Значение индекса правой плоскости отсечения проекции.

Planes PLANE_BOTTOM = 5

Значение индекса нижней плоскости отсечения проекции.


Константы

IDENTITY = Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) 🔗

Projection без определенного преобразования. При применении к другим структурам данных преобразование не выполняется.

ZERO = Projection(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 🔗

Projection со всеми значениями, инициализированными до 0. При применении к другим структурам данных они будут обнулены.


Описания свойств

Vector4 w = Vector4(0, 0, 0, 1) 🔗

Вектор W матрицы проекции (столбец 3). Эквивалентно индексу массива 3.


Vector4 x = Vector4(1, 0, 0, 0) 🔗

Вектор X матрицы проекции (столбец 0). Эквивалентно индексу массива 0.


Vector4 y = Vector4(0, 1, 0, 0) 🔗

Вектор Y матрицы проекции (столбец 1). Эквивалентно индексу массива 1.


Vector4 z = Vector4(0, 0, 1, 0) 🔗

Вектор Z матрицы проекции (столбец 2). Эквивалентно индексу массива 2.


Описания конструктора

Projection Projection() 🔗

Создает инициализированную по умолчанию Projection, идентичную IDENTITY.

Примечание: В C# это создает Projection, идентичную ZERO.


Projection Projection(from: Projection)

Создает Projection как копию заданной Projection.


Projection Projection(from: Transform3D)

Создает проекцию как копию заданного Transform3D.


Projection Projection(x_axis: Vector4, y_axis: Vector4, z_axis: Vector4, w_axis: Vector4)

Создает проекцию из четырех значений Vector4 (столбцов матрицы).


Описания метода

Projection create_depth_correction(flip_y: bool) static 🔗

Создает новую Projection, которая проецирует позиции из диапазона глубины от -1 до 1 в диапазон от 0 до 1, и переворачивает спроецированные позиции вертикально в соответствии с flip_y.


Projection create_fit_aabb(aabb: AABB) static 🔗

Создает новую Projection, которая масштабирует заданную проекцию так, чтобы она соответствовала заданному AABB в пространстве проекции.


Projection create_for_hmd(eye: int, aspect: float, intraocular_dist: float, display_width: float, display_to_lens: float, oversample: float, z_near: float, z_far: float) static 🔗

Создает новую Projection для проецирования позиций на шлем виртуальной реальности с заданным соотношением сторон X:Y, расстоянием между глазами, шириной дисплея, расстоянием до линзы, коэффициентом передискретизации и плоскостями отсечения глубины.

eye создает проекцию для левого глаза, если установлено значение 1, или для правого глаза, если установлено значение 2.


Projection create_frustum(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static 🔗

Создает новую Projection, которая проецирует положения в усеченной пирамиде с заданными плоскостями отсечения.


Projection create_frustum_aspect(size: float, aspect: float, offset: Vector2, z_near: float, z_far: float, flip_fov: bool = false) static 🔗

Создает новую Projection, которая проецирует позиции в усеченном пространстве с заданным размером, соотношением сторон X:Y, смещением и плоскостями отсечения.

flip_fov определяет, переворачивается ли поле зрения проекции по диагонали.


Projection create_light_atlas_rect(rect: Rect2) static 🔗

Создает новую Projection, которая проецирует позиции в заданный Rect2.


Projection create_orthogonal(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static 🔗

Создает новую Projection, которая проецирует положения с использованием ортогональной проекции с заданными плоскостями отсечения.


Projection create_orthogonal_aspect(size: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static 🔗

Создает новую Projection, которая проецирует позиции с использованием ортогональной проекции с заданным размером, соотношением сторон X:Y и плоскостями отсечения.

flip_fov определяет, перевернуто ли поле зрения проекции по диагонали.


Projection create_perspective(fovy: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static 🔗

Создает новую Projection, которая проецирует позиции с использованием перспективной проекции с заданным полем зрения оси Y (в градусах), соотношением сторон X:Y и плоскостями отсечения.

flip_fov определяет, перевернуто ли поле зрения проекции по диагонали.


Projection create_perspective_hmd(fovy: float, aspect: float, z_near: float, z_far: float, flip_fov: bool, eye: int, intraocular_dist: float, convergence_dist: float) static 🔗

Создает новую Projection, которая проецирует положения с использованием перспективной проекции с заданным полем зрения оси Y (в градусах), соотношением сторон X:Y и расстояниями отсечения. Проекция настраивается для головного дисплея с заданным расстоянием между глазами и расстоянием до точки, на которой можно сфокусироваться.

eye создает проекцию для левого глаза, если установлено значение 1, или для правого глаза, если установлено значение 2.

flip_fov определяет, переворачивается ли поле зрения проекции по диагонали.


float determinant() const 🔗

Возвращает скалярное значение, которое является знаковым множителем, на который масштабируются площади этой матрицей. Если знак отрицательный, матрица меняет ориентацию площади.

Определитель можно использовать для вычисления обратимости матрицы или решения линейных систем уравнений, включающих матрицу, среди других приложений.


Projection flipped_y() const 🔗

Возвращает копию этой Projection с перевернутыми знаками значений столбца Y.


float get_aspect() const 🔗

Возвращает соотношение сторон X:Y области просмотра Projection.


Vector2 get_far_plane_half_extents() const 🔗

Возвращает размеры дальней плоскости отсечения проекции, деленные на два.


float get_fov() const 🔗

Возвращает горизонтальное поле зрения проекции (в градусах).


float get_fovy(fovx: float, aspect: float) static 🔗

Возвращает вертикальное поле зрения проекции (в градусах), связанное с заданным горизонтальным полем зрения (в градусах) и соотношением сторон.

Примечание: В отличие от большинства методов Projection, aspects ожидается равным 1, деленной на соотношение сторон X:Y.


float get_lod_multiplier() const 🔗

Возвращает коэффициент, на который масштабируется видимый уровень детализации этой Projection.


int get_pixels_per_meter(for_pixel_width: int) const 🔗

Возвращает for_pixel_width, деленный на ширину области просмотра, измеренную в метрах на ближней плоскости, после применения этой Projection.


Plane get_projection_plane(plane: int) const 🔗

Возвращает плоскость отсечения этой Projection, индекс которой задан plane.

plane должен быть равен одному из PLANE_NEAR, PLANE_FAR, PLANE_LEFT, PLANE_TOP, PLANE_RIGHT или PLANE_BOTTOM.


Vector2 get_viewport_half_extents() const 🔗

Возвращает размеры плоскости области просмотра, на которую проецируются позиции этой Projection, деленные на два.


float get_z_far() const 🔗

Возвращает расстояние для данной Projection, за пределами которого позиции обрезаются.


float get_z_near() const 🔗

Возвращает расстояние для данной Projection, перед которым позиции обрезаются.


Projection inverse() const 🔗

Возвращает Projection, которая выполняет обратное проективное преобразование данной Projection.


bool is_orthogonal() const 🔗

Возвращает true, если эта Projection выполняет ортогональную проекцию.


Projection jitter_offseted(offset: Vector2) const 🔗

Возвращает Projection со значениями X и Y из заданного Vector2, добавленными к первому и второму значениям конечного столбца соответственно.


Projection perspective_znear_adjusted(new_znear: float) const 🔗

Возвращает Projection с ближним расстоянием отсечения, настроенным на new_znear.

Примечание: Исходная Projection должна быть перспективной проекцией.


Описания оператора

bool operator !=(right: Projection) 🔗

Возвращает true, если проекции не равны.

Примечание: Из-за ошибок точности с плавающей точкой это может вернуть true, даже если проекции фактически равны. Метод is_equal_approx может быть добавлен в будущей версии Godot.


Projection operator *(right: Projection) 🔗

Возвращает Projection, которая применяет комбинированные преобразования этой Projection и right.


Vector4 operator *(right: Vector4) 🔗

Проецирует (умножает) заданный Vector4 на данную матрицу Projection.


bool operator ==(right: Projection) 🔗

Возвращает true, если проекции равны.

Примечание: Из-за ошибок точности с плавающей точкой это может вернуть false, даже если проекции фактически равны. Метод is_equal_approx может быть добавлен в будущей версии Godot.


Vector4 operator [](index: int) 🔗

Возвращает столбец Projection с заданным индексом.

Индексы имеют следующий порядок: x, y, z, w.