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.

Transform3D

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

描述

用于 3D 线性变换的 3×4 矩阵(3 行 4 列),可以表示平移、旋转、缩放等变换,由 basis(前三列)和 originVector3(最后一列)组成。

更多信息请阅读文档文章《矩阵与变换》。

备注

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

教程

属性

Basis

basis

Basis(1, 0, 0, 0, 1, 0, 0, 0, 1)

Vector3

origin

Vector3(0, 0, 0)

构造函数

Transform3D

Transform3D ( )

Transform3D

Transform3D ( Transform3D from )

Transform3D

Transform3D ( Basis basis, Vector3 origin )

Transform3D

Transform3D ( Projection from )

Transform3D

Transform3D ( Vector3 x_axis, Vector3 y_axis, Vector3 z_axis, Vector3 origin )

方法

Transform3D

affine_inverse ( ) const

Transform3D

interpolate_with ( Transform3D xform, float weight ) const

Transform3D

inverse ( ) const

bool

is_equal_approx ( Transform3D xform ) const

bool

is_finite ( ) const

Transform3D

looking_at ( Vector3 target, Vector3 up=Vector3(0, 1, 0), bool use_model_front=false ) const

Transform3D

orthonormalized ( ) const

Transform3D

rotated ( Vector3 axis, float angle ) const

Transform3D

rotated_local ( Vector3 axis, float angle ) const

Transform3D

scaled ( Vector3 scale ) const

Transform3D

scaled_local ( Vector3 scale ) const

Transform3D

translated ( Vector3 offset ) const

Transform3D

translated_local ( Vector3 offset ) const

操作符

bool

operator != ( Transform3D right )

AABB

operator * ( AABB right )

PackedVector3Array

operator * ( PackedVector3Array right )

Plane

operator * ( Plane right )

Transform3D

operator * ( Transform3D right )

Vector3

operator * ( Vector3 right )

Transform3D

operator * ( float right )

Transform3D

operator * ( int right )

bool

operator == ( Transform3D right )


常量

IDENTITY = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

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

FLIP_X = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

应用了垂直于 YZ 平面镜像操作的 Transform3D

FLIP_Y = Transform3D(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0)

应用了垂直于 XZ 平面镜像操作的 Transform3D

FLIP_Z = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0)

应用了垂直于 XY 平面镜像操作的 Transform3D


属性说明

Basis basis = Basis(1, 0, 0, 0, 1, 0, 0, 0, 1)

基是一个矩阵,包含 3 个 Vector3 作为其列:X 轴、Y 轴、Z 轴。这些向量可以被解释为随物体移动的局部坐标系的基向量。


Vector3 origin = Vector3(0, 0, 0)

变换的平移偏移量,即第 3、4 列。相当于数组索引 3


构造函数说明

Transform3D Transform3D ( )

构造默认初始化为 IDENTITYTransform3D


Transform3D Transform3D ( Transform3D from )

构造给定 Transform3D 的副本。


Transform3D Transform3D ( Basis basis, Vector3 origin )

BasisVector3 构造 Transform3D。


Transform3D Transform3D ( Projection from )

通过修剪投影矩阵的最后一行,从 Projection 中构造 Transform3D(不会复制 from.x.wfrom.y.wfrom.z.wfrom.w.w)。


Transform3D Transform3D ( Vector3 x_axis, Vector3 y_axis, Vector3 z_axis, Vector3 origin )

从四个 Vector3 值(矩阵列)构造 Transform3D。每个轴对应于局部基向量(其中一些可能已被缩放)。


方法说明

Transform3D affine_inverse ( ) const

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


Transform3D interpolate_with ( Transform3D xform, float weight ) const

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


Transform3D inverse ( ) const

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


bool is_equal_approx ( Transform3D xform ) const

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


bool is_finite ( ) const

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


Transform3D looking_at ( Vector3 target, Vector3 up=Vector3(0, 1, 0), bool use_model_front=false ) const

返回该变换经过旋转后的副本,此时向前的轴(-Z)指向 target 的位置。

向上的轴(+Y)在保持与向前的轴垂直的前提下,尽可能接近 up 向量。最终的变换是标准正交变换。变换中原有的旋转、缩放、偏斜信息会被丢弃。targetup 向量不能为零,不能互相平行,使用全局/父级空间。

如果 use_model_fronttrue,则会将 +Z 轴(资产正面)作为向前的轴(此时 +X 为左),指向 target 的位置。默认情况下会将 -Z 轴(相机前方)作为向前的轴(此时 +X 为右)。


Transform3D orthonormalized ( ) const

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


Transform3D rotated ( Vector3 axis, float angle ) const

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

axis 必须为归一化的向量。

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

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


Transform3D rotated_local ( Vector3 axis, float angle ) const

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

axis 必须为归一化的向量。

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

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


Transform3D scaled ( Vector3 scale ) const

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

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

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


Transform3D scaled_local ( Vector3 scale ) const

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

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

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


Transform3D translated ( Vector3 offset ) const

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

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

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


Transform3D translated_local ( Vector3 offset ) const

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

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

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


操作符说明

bool operator != ( Transform3D right )

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

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


AABB operator * ( AABB right )

使用给定的 Transform3D 矩阵对 AABB 进行变换(相乘)。


PackedVector3Array operator * ( PackedVector3Array right )

使用给定的 Transform3D 矩阵对 Vector3 数组中的每个元素进行变换(相乘)。


Plane operator * ( Plane right )

使用给定的 Transform3D 矩阵对 Plane 进行变换(相乘)。


Transform3D operator * ( Transform3D right )

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


Vector3 operator * ( Vector3 right )

使用给定的 Transform3D 矩阵对 Vector3 进行变换(相乘)。


Transform3D operator * ( float right )

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


Transform3D operator * ( int right )

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


bool operator == ( Transform3D right )

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

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