Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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 ( Transform2D from )

Transform2D

Transform2D ( float rotation, Vector2 position )

Transform2D

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

Transform2D

Transform2D ( Vector2 x_axis, Vector2 y_axis, Vector2 origin )

方法

Transform2D

affine_inverse ( ) const

Vector2

basis_xform ( Vector2 v ) const

Vector2

basis_xform_inv ( Vector2 v ) const

float

determinant ( ) const

Vector2

get_origin ( ) const

float

get_rotation ( ) const

Vector2

get_scale ( ) const

float

get_skew ( ) const

Transform2D

interpolate_with ( Transform2D xform, float weight ) const

Transform2D

inverse ( ) const

bool

is_conformal ( ) const

bool

is_equal_approx ( Transform2D xform ) const

bool

is_finite ( ) const

Transform2D

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

Transform2D

orthonormalized ( ) const

Transform2D

rotated ( float angle ) const

Transform2D

rotated_local ( float angle ) const

Transform2D

scaled ( Vector2 scale ) const

Transform2D

scaled_local ( Vector2 scale ) const

Transform2D

translated ( Vector2 offset ) const

Transform2D

translated_local ( Vector2 offset ) const

操作符

bool

operator != ( Transform2D right )

PackedVector2Array

operator * ( PackedVector2Array right )

Rect2

operator * ( Rect2 right )

Transform2D

operator * ( Transform2D right )

Vector2

operator * ( Vector2 right )

Transform2D

operator * ( float right )

Transform2D

operator * ( int right )

bool

operator == ( Transform2D right )

Vector2

operator [] ( int index )


常量

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 ( Transform2D from )

构造给定 Transform2D 的副本。


Transform2D Transform2D ( float rotation, Vector2 position )

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


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

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


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

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


方法说明

Transform2D affine_inverse ( ) const

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


Vector2 basis_xform ( Vector2 v ) const

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

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


Vector2 basis_xform_inv ( Vector2 v ) 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 ( Transform2D xform, float weight ) const

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


Transform2D inverse ( ) const

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


bool is_conformal ( ) const

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


bool is_equal_approx ( Transform2D xform ) const

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


bool is_finite ( ) const

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


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

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

操作发生在全局空间中。


Transform2D orthonormalized ( ) const

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


Transform2D rotated ( float angle ) const

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

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

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


Transform2D rotated_local ( float angle ) const

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

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

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


Transform2D scaled ( Vector2 scale ) const

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

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

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


Transform2D scaled_local ( Vector2 scale ) const

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

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

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


Transform2D translated ( Vector2 offset ) const

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

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

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


Transform2D translated_local ( Vector2 offset ) const

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

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

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


操作符说明

bool operator != ( Transform2D right )

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

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


PackedVector2Array operator * ( PackedVector2Array right )

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


Rect2 operator * ( Rect2 right )

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


Transform2D operator * ( Transform2D right )

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


Vector2 operator * ( Vector2 right )

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


Transform2D operator * ( float right )

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


Transform2D operator * ( int right )

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


bool operator == ( Transform2D right )

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

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


Vector2 operator [] ( int index )

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