Transform3D
代表 3D 变换的 3×4 矩阵。
描述
用于 3D 线性变换的 3×4 矩阵(3 行 4 列),可以表示平移、旋转、缩放等变换,由 basis(前三列)和 origin 的 Vector3(最后一列)组成。
更多信息请阅读文档文章《矩阵与变换》。
备注
通过 C# 使用这个 API 时有显著的不同。详见 C# API 与 GDScript 的差异。
教程
属性
| ||
|
构造函数
Transform3D ( ) | |
Transform3D ( Transform3D from ) | |
Transform3D ( Basis basis, Vector3 origin ) | |
Transform3D ( Projection from ) | |
Transform3D ( Vector3 x_axis, Vector3 y_axis, Vector3 z_axis, Vector3 origin ) |
方法
affine_inverse ( ) const | |
interpolate_with ( Transform3D xform, float weight ) const | |
inverse ( ) const | |
is_equal_approx ( Transform3D xform ) const | |
is_finite ( ) const | |
looking_at ( Vector3 target, Vector3 up=Vector3(0, 1, 0), bool use_model_front=false ) const | |
orthonormalized ( ) const | |
rotated_local ( Vector3 axis, float angle ) const | |
scaled_local ( Vector3 scale ) const | |
translated ( Vector3 offset ) const | |
translated_local ( Vector3 offset ) const |
操作符
operator != ( Transform3D right ) | |
operator ( PackedVector3Array right ) | |
operator ( Transform3D right ) | |
operator * ( int right ) | |
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 ( )
构造默认初始化为 IDENTITY 的 Transform3D。
Transform3D Transform3D ( Transform3D from )
构造给定 Transform3D 的副本。
Transform3D Transform3D ( Basis basis, Vector3 origin )
从 Basis 和 Vector3 构造 Transform3D。
Transform3D Transform3D ( Projection from )
通过修剪投影矩阵的最后一行,从 Projection 中构造 Transform3D(不会复制 from.x.w
、from.y.w
、from.z.w
、from.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
向量。最终的变换是标准正交变换。变换中原有的旋转、缩放、偏斜信息会被丢弃。target
和 up
向量不能为零,不能互相平行,使用全局/父级空间。
如果 use_model_front
为 true
,则会将 +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,会更可靠。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.