Up to date

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

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,会更可靠。