Projection

用于3D投影变换的4×4矩阵。

描述

用于3D投影变换的4×4矩阵。它可以表示平移、旋转、缩放、剪切和透视分割等变换。它由四个Vector4列组成。

对于纯线性转换(平移、旋转和缩放),建议使用Transform3D,因为它性能更高且需要更少的内存。

内部用作Camera的投影矩阵。

属性

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

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

运算符


枚举

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) 🔗

所有值初始化为0的Projection。当应用于其他数据结构时,它们将被归零。


属性说明

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() 🔗

构造一个与IDENTITY相同的默认初始化Projection

注意:在C#中,这构造了一个与ZERO相同的Projection


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,该投影位置从-11的深度范围到01的深度范围,并根据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 🔗

返回此Projection视口的X: Y长宽比。


Vector2 get_far_plane_half_extents() const 🔗

返回投影的远裁剪平面的尺寸,除以2。


float get_fov() const 🔗

返回投影的水平视野(以度为单位)。


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

返回与给定水平视野(以度为单位)和长宽比相关联的投影的垂直视野(以度为单位)。

注:Projection的大多数方法不同,aspect预计为1除以X: Y长宽比。


float get_lod_multiplier() const 🔗

返回此Projection缩放可见详细级别的因子。


int get_pixels_per_meter(for_pixel_width: int) const 🔗

应用此Projection后,返回每米显示的具有给定像素宽度的像素数。


Plane get_projection_plane(plane: int) const 🔗

返回索引由plane给出的此Projection的裁剪平面。

plane应等于PLANE_NEARPLANE_FARPLANE_LEFTPLANE_TOPPLANE_RIGHTPLANE_BOTTOM之一。


Vector2 get_viewport_half_extents() const 🔗

返回此Projection投影到的视口平面的尺寸,除以2。


float get_z_far() const 🔗

返回此Projection的距离,超过该距离的位置被裁剪。


float get_z_near() const 🔗

返回此Projection在剪辑位置之前的距离。


Projection inverse() const 🔗

返回执行此Projection的投影变换的逆的Projection


bool is_orthogonal() const 🔗

如果此Projection执行正交投影,则返回true


Projection jitter_offseted(offset: Vector2) const 🔗

返回一个Projection,其中给定Vector2中的X和Y值分别添加到最后一列的第一个和第二个值中。


Projection perspective_znear_adjusted(new_znear: float) const 🔗

返回近裁剪距离调整为new_znearProjection

注:Projection必须是透视投影。


运算符说明

bool operator !=(right: Projection) 🔗

如果投影不相等,则返回true

注意:由于浮点精度错误,这可能会返回true,即使投影实际上相等。is_equal_approx方法可能会在i3D的未来版本中添加。


Projection operator *(right: Projection) 🔗

返回应用此Projectionright的组合转换的Projection


Vector4 operator *(right: Vector4) 🔗

用这个Projection矩阵投影(乘以)给定的Vector4


bool operator ==(right: Projection) 🔗

如果投影相等,则返回true

注意:由于浮点精度错误,这可能会返回false,即使投影实际上相等。is_equal_approx方法可能会在i3D的未来版本中添加。


Vector4 operator [](index: int) 🔗

返回具有给定索引的Projection列。

指数按以下顺序排列:x、y、z、w。