Projection
Матрица 4×4 для трехмерных проективных преобразований.
Описание
Матрица 4×4, используемая для 3D-проективных преобразований. Она может представлять такие преобразования, как перемещение, вращение, масштабирование, сдвиг и перспективное деление. Она состоит из четырех столбцов Vector4.
Для чисто линейных преобразований (перемещение, вращение и масштабирование) рекомендуется использовать Transform3D, так как она более производительна и требует меньше памяти.
Используется внутренне как матрица проекции Camera3D.
Примечание
Существуют заметные различия при использовании данного API с C#. Подробнее см. API различия C# и GDScript.
Свойства
|
||
|
||
|
||
|
Конструкторы
Projection(from: Projection) |
|
Projection(from: Transform3D) |
|
Projection(x_axis: Vector4, y_axis: Vector4, z_axis: Vector4, w_axis: Vector4) |
Методы
create_depth_correction(flip_y: bool) static |
|
create_fit_aabb(aabb: AABB) static |
|
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 |
|
create_frustum(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static |
|
create_frustum_aspect(size: float, aspect: float, offset: Vector2, z_near: float, z_far: float, flip_fov: bool = false) static |
|
create_light_atlas_rect(rect: Rect2) static |
|
create_orthogonal(left: float, right: float, bottom: float, top: float, z_near: float, z_far: float) static |
|
create_orthogonal_aspect(size: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static |
|
create_perspective(fovy: float, aspect: float, z_near: float, z_far: float, flip_fov: bool = false) static |
|
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 |
|
determinant() const |
|
flipped_y() const |
|
get_aspect() const |
|
get_far_plane_half_extents() const |
|
get_fov() const |
|
get_lod_multiplier() const |
|
get_pixels_per_meter(for_pixel_width: int) const |
|
get_projection_plane(plane: int) const |
|
get_viewport_half_extents() const |
|
get_z_far() const |
|
get_z_near() const |
|
inverse() const |
|
is_orthogonal() const |
|
jitter_offseted(offset: Vector2) const |
|
perspective_znear_adjusted(new_znear: float) const |
Операторы
operator !=(right: Projection) |
|
operator *(right: Projection) |
|
operator *(right: Vector4) |
|
operator ==(right: Projection) |
|
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 определяет, переворачивается ли поле зрения проекции по диагонали.
Возвращает скалярное значение, которое является знаковым множителем, на который масштабируются площади этой матрицей. Если знак отрицательный, матрица меняет ориентацию площади.
Определитель можно использовать для вычисления обратимости матрицы или решения линейных систем уравнений, включающих матрицу, среди других приложений.
Projection flipped_y() const 🔗
Возвращает копию этой Projection с перевернутыми знаками значений столбца Y.
Возвращает соотношение сторон X:Y области просмотра Projection.
Vector2 get_far_plane_half_extents() 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, деленные на два.
Возвращает расстояние для данной Projection, за пределами которого позиции обрезаются.
Возвращает расстояние для данной Projection, перед которым позиции обрезаются.
Projection inverse() const 🔗
Возвращает Projection, которая выполняет обратное проективное преобразование данной Projection.
Возвращает 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.