Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Transform2D

代表 2D 变换的 2×3 矩阵。

描述

用于 2D 线性变换的 2×3 矩阵(2 行 3 列),可以表示平移、旋转、缩放等变换,由三个 Vector2 值组成:xyorigin

通用介绍见教程《矩阵与变换》

备注

通过 C# 使用这个 API 时有显著的不同。详见 C# API 与 GDScript 的差异

教程

属性

Vector2

origin

Vector2(0, 0)

Vector2

x

Vector2(1, 0)

Vector2

y

Vector2(0, 1)

构造函数

Transform2D

Transform2D()

Transform2D

Transform2D(from: Transform2D)

Transform2D

Transform2D(rotation: float, position: Vector2)

Transform2D

Transform2D(rotation: float, scale: Vector2, skew: float, position: Vector2)

Transform2D

Transform2D(x_axis: Vector2, y_axis: Vector2, origin: Vector2)

方法

Transform2D

affine_inverse() const

Vector2

basis_xform(v: Vector2) const

Vector2

basis_xform_inv(v: Vector2) const

float

determinant() const

Vector2

get_origin() const

float

get_rotation() const

Vector2

get_scale() const

float

get_skew() const

Transform2D

interpolate_with(xform: Transform2D, weight: float) const

Transform2D

inverse() const

bool

is_conformal() const

bool

is_equal_approx(xform: Transform2D) const

bool

is_finite() const

Transform2D

looking_at(target: Vector2 = Vector2(0, 0)) const

Transform2D

orthonormalized() const

Transform2D

rotated(angle: float) const

Transform2D

rotated_local(angle: float) const

Transform2D

scaled(scale: Vector2) const

Transform2D

scaled_local(scale: Vector2) const

Transform2D

translated(offset: Vector2) const

Transform2D

translated_local(offset: Vector2) const

操作符

bool

operator !=(right: Transform2D)

PackedVector2Array

operator *(right: PackedVector2Array)

Rect2

operator *(right: Rect2)

Transform2D

operator *(right: Transform2D)

Vector2

operator *(right: Vector2)

Transform2D

operator *(right: float)

Transform2D

operator *(right: int)

Transform2D

operator /(right: float)

Transform2D

operator /(right: int)

bool

operator ==(right: Transform2D)

Vector2

operator [](index: int)


常量

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

没有应用平移、旋转、缩放的恒等 Transform2D。当应用于其他数据结构时,IDENTITY 不执行变换。

FLIP_X = Transform2D(-1, 0, 0, 1, 0, 0) 🔗

将沿 X 轴翻转的 Transform2D

FLIP_Y = Transform2D(1, 0, 0, -1, 0, 0) 🔗

将沿 Y 轴翻转的 Transform2D


属性说明

Vector2 origin = Vector2(0, 0) 🔗

原点向量(2 号列,即第 3 列)。相当于使用 2 进行数组索引。原点向量代表平移。


Vector2 x = Vector2(1, 0) 🔗

基矩阵的 X 向量(第 0 列)。相当于数组索引 0


Vector2 y = Vector2(0, 1) 🔗

基矩阵的 Y 向量(第 1 列)。相当于数组索引 1


构造函数说明

Transform2D Transform2D() 🔗

构造默认初始化为 IDENTITYTransform2D


Transform2D Transform2D(from: Transform2D)

构造给定 Transform2D 的副本。


Transform2D Transform2D(rotation: float, position: Vector2)

从给定的角度(单位为弧度)和位置构造变换。


Transform2D Transform2D(rotation: float, scale: Vector2, skew: float, position: Vector2)

从给定的角度(单位为弧度)、缩放、偏斜(单位为弧度)和位置构造变换。


Transform2D Transform2D(x_axis: Vector2, y_axis: Vector2, origin: Vector2)

从表示 xyorigin 的 3 个 Vector2(三个列向量)构建变换。


方法说明

Transform2D affine_inverse() const 🔗

假设该基可逆(必须具有非零行列式),返回该变换的逆。


Vector2 basis_xform(v: Vector2) const 🔗

返回经过基矩阵变换(相乘)的向量。

该方法不考虑平移(origin 向量)。


Vector2 basis_xform_inv(v: Vector2) const 🔗

返回一个由逆基矩阵变换(乘以)的向量,假设该基是正交的(即旋转/反射可以,缩放/倾斜不行)。

该方法不考虑翻译(origin 向量)。

transform.basis_xform_inv(vector) 性当于 transform.inverse().basis_xform(vector)。请参阅 inverse

对于非正交变换(例如缩放),可以使用 transform.affine_inverse().basis_xform(vector) 代替。请参阅 affine_inverse


float determinant() const 🔗

返回基矩阵的行列式。如果基是均匀缩放的,则它的行列式是缩放系数的平方。

行列式为负意味着基发生了翻转,因此缩放中有一个分量是负的。行列式为零意味着基不可逆,通常认为是无效的基。


Vector2 get_origin() const 🔗

返回该变换的原点(平移)。


float get_rotation() const 🔗

返回该变换的旋转(单位为弧度)。


Vector2 get_scale() const 🔗

返回缩放。


float get_skew() const 🔗

返回该变换的偏斜(单位为弧度)。


Transform2D interpolate_with(xform: Transform2D, weight: float) const 🔗

返回将该变换与其他变换使用给定权重 weight 进行插值的结果(权重范围为 0.0 到 1.0)。


Transform2D inverse() const 🔗

返回变换的逆,假设该变换的基是正交的(即旋转/反射可以,缩放/倾斜不行)。使用 affine_inverse 进行非正交变换(例如缩放)。


bool is_conformal() const 🔗

如果该变换的基是共形的,则返回 true,这意味着它保留角度和距离比率,并且只能由旋转和均一缩放组成。如果该变换的基具有不均一的缩放或剪切/倾斜,则返回 false。这可被用于验证该变换是否失真,这对于物理和其他用例很重要。


bool is_equal_approx(xform: Transform2D) const 🔗

如果通过在每个分量上运行 @GlobalScope.is_equal_approx,该变换和 xform 近似相等,则返回 true


bool is_finite() const 🔗

如果该变换是有限的,则返回 true,判断方法是在每个分量上调用 @GlobalScope.is_finite


Transform2D looking_at(target: Vector2 = Vector2(0, 0)) const 🔗

返回一个旋转后的变换副本,使旋转后的 X 轴指向 target 位置。

操作发生在全局空间中。


Transform2D orthonormalized() const 🔗

返回使用正交基(90 度)以及归一化的轴向量(缩放为 1 或 -1)的变换。


Transform2D rotated(angle: float) const 🔗

返回该变换的副本,该副本进行了夹角为 angle 的旋转操作(单位为弧度)。

这个方法的结果和让 X 变换与相应的旋转变换 R 从左侧相乘一致,即 R * X,但进行了优化。

可以视作在全局/父级坐标系中的变换。


Transform2D rotated_local(angle: float) const 🔗

返回该变换的副本,该副本进行了夹角为 angle 的旋转操作(单位为弧度)。

这个方法的结果和让 X 变换与相应的旋转变换 R 从右侧相乘一致,即 X * R,但进行了优化。

可以视作在局部坐标系中的变换。


Transform2D scaled(scale: Vector2) const 🔗

返回该变换的副本,该副本进行了系数为 scale 的缩放操作。

这个方法的结果和让 X 变换与相应的缩放变换 S 从左侧相乘一致,即 S * X,但进行了优化。

可以视作在全局/父级坐标系中的变换。


Transform2D scaled_local(scale: Vector2) const 🔗

返回该变换的副本,该副本进行了系数为 scale 的缩放操作。

这个方法的结果和让 X 变换与相应的缩放变换 S 从右侧相乘一致,即 X * S,但进行了优化。

可以视作在局部坐标系中的变换。


Transform2D translated(offset: Vector2) const 🔗

返回该变换的副本,该副本进行了偏移量为 offset 的平移操作。

这个方法的结果和让 X 变换与相应的平移变换 T 从左侧相乘一致,即 T * X,但进行了优化。

可以视作在全局/父级坐标系中的变换。


Transform2D translated_local(offset: Vector2) const 🔗

返回该变换的副本,该副本进行了偏移量为 offset 的平移操作。

这个方法的结果和让 X 变换与相应的平移变换 T 从右侧相乘一致,即 X * T,但进行了优化。

可以视作在局部坐标系中的变换。


操作符说明

bool operator !=(right: Transform2D) 🔗

如果变换不相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 is_equal_approx,会更可靠。


PackedVector2Array operator *(right: PackedVector2Array) 🔗

使用给定的 Transform2D 矩阵将该 Vector2 数组中的每个元素进行变换(相乘)。


Rect2 operator *(right: Rect2) 🔗

使用给定的 Transform2D 矩阵将该 Rect2 进行变换(相乘)。


Transform2D operator *(right: Transform2D) 🔗

通过将这两个变换矩阵相乘来组合它们。这具有通过第一个变换(父项)来变换第二个变换(子项)的效果。


Vector2 operator *(right: Vector2) 🔗

使用给定的 Transform2D 矩阵将该 Vector2 进行变换(相乘)。


Transform2D operator *(right: float) 🔗

该运算符将 Transform2D 的所有分量相乘,包括 origin 向量,从而对其进行统一缩放。


Transform2D operator *(right: int) 🔗

该运算符将 Transform2D 的所有分量相乘,包括 origin 向量,从而对其进行统一缩放。


Transform2D operator /(right: float) 🔗

该运算符除以 Transform2D 的所有分量,包括 origin 向量,这会对其进行均匀反向缩放。


Transform2D operator /(right: int) 🔗

该运算符除以 Transform2D 的所有分量,包括 origin 向量,这会对其进行均匀反向缩放。


bool operator ==(right: Transform2D) 🔗

如果变换完全相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 is_equal_approx,会更可靠。


Vector2 operator [](index: int) 🔗

使用变换分量的索引访问变换的分量。t[0] 相当于 t.xt[1] 相当于 t.yt[2] 相当于 t.origin