Projection¶
用于3D投影变换的4×4矩阵。
描述¶
用于3D投影变换的4×4矩阵。它可以表示平移、旋转、缩放、剪切和透视分割等变换。它由四个Vector4列组成。
对于纯线性转换(平移、旋转和缩放),建议使用Transform3D,因为它性能更高且需要更少的内存。
内部用作Camera的投影矩阵。
属性¶
构造函数¶
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) 🔗
所有值初始化为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,该投影位置从-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列值的符号已翻转。
返回此Projection视口的X: Y长宽比。
Vector2 get_far_plane_half_extents() const 🔗
返回投影的远裁剪平面的尺寸,除以2。
返回投影的水平视野(以度为单位)。
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_NEAR、PLANE_FAR、PLANE_LEFT、PLANE_TOP、PLANE_RIGHT或PLANE_BOTTOM之一。
Vector2 get_viewport_half_extents() const 🔗
返回此Projection投影到的视口平面的尺寸,除以2。
返回此Projection的距离,超过该距离的位置被裁剪。
返回此Projection在剪辑位置之前的距离。
Projection inverse() const 🔗
返回执行此Projection的投影变换的逆的Projection。
如果此Projection执行正交投影,则返回true。
Projection jitter_offseted(offset: Vector2) const 🔗
返回一个Projection,其中给定Vector2中的X和Y值分别添加到最后一列的第一个和第二个值中。
Projection perspective_znear_adjusted(new_znear: float) const 🔗
返回近裁剪距离调整为new_znear的Projection。
注:原Projection必须是透视投影。
运算符说明¶
bool operator !=(right: Projection) 🔗
如果投影不相等,则返回true。
注意:由于浮点精度错误,这可能会返回true,即使投影实际上相等。is_equal_approx方法可能会在i3D的未来版本中添加。
Projection operator *(right: Projection) 🔗
返回应用此Projection和right的组合转换的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。