跳转至

GFTransform3DMath

API Reference / Standard / 类索引

  • 路径:addons/gf/standard/foundation/math/gf_transform_3d_math.gd
  • 模块:Standard
  • 继承:RefCounted
  • API:public
  • 类别:运行时服务 (runtime_service)
  • 首次版本:8.0.0

通用 3D Transform 纯数学工具。 提供点、方向与 Transform3D 的平面反射、射线平面命中、表面吸附和锚点对齐计算。 它不创建节点、不处理镜面渲染,也不决定相机、材质、Portal、关卡编辑器或放置工具的业务语义。

成员概览

类型 名称 签名
枚举 ScaleAxisMode enum ScaleAxisMode
方法 make_reflection_transform static func make_reflection_transform(plane_normal: Vector3, plane_point: Vector3) -> Transform3D:
方法 reflect_point static func reflect_point(point: Vector3, plane_normal: Vector3, plane_point: Vector3) -> Vector3:
方法 reflect_direction static func reflect_direction(direction: Vector3, plane_normal: Vector3) -> Vector3:
方法 reflect_transform static func reflect_transform( transform: Transform3D, plane_normal: Vector3, plane_point: Vector3 ) -> Transform3D:
方法 intersect_ray_plane static func intersect_ray_plane( ray_origin: Vector3, ray_direction: Vector3, plane_normal: Vector3, plane_point: Vector3, max_distance: float = -1.0, face_normal_to_ray: bool = true ) -> Dictionary:
方法 make_basis_from_up_and_z_hint static func make_basis_from_up_and_z_hint( up_axis: Vector3, z_axis_hint: Vector3 = Vector3.BACK ) -> Basis:
方法 apply_scale_axis_mode static func apply_scale_axis_mode( weight: Vector3, mode: ScaleAxisMode = ScaleAxisMode.UNIFORM ) -> Vector3:
方法 interpolate_scale static func interpolate_scale( min_scale: Vector3, max_scale: Vector3, weight: Vector3, mode: ScaleAxisMode = ScaleAxisMode.UNIFORM ) -> Vector3:
方法 snap_point_to_plane_grid static func snap_point_to_plane_grid( point: Vector3, plane_normal: Vector3, grid_step: float, plane_origin: Vector3 = Vector3.ZERO ) -> Dictionary:
方法 move_local_point_to_world static func move_local_point_to_world( transform: Transform3D, local_point: Vector3, world_point: Vector3 ) -> Transform3D:

枚举

ScaleAxisMode

  • API:public
  • 首次版本:8.0.0
enum ScaleAxisMode {
    ## X/Y/Z 使用同一个权重。
    UNIFORM,
    ## X/Y/Z 分别使用输入权重。
    FREE,
    ## X/Y 共用 X 权重,Z 保留自身权重。
    LOCK_XY,
    ## X/Z 共用 X 权重,Y 保留自身权重。
    LOCK_XZ,
    ## Y/Z 共用 Y 权重,X 保留自身权重。
    LOCK_YZ,
}

3D 缩放权重的轴向锁定模式。

方法

make_reflection_transform

  • API:public
  • 首次版本:8.0.0
static func make_reflection_transform(plane_normal: Vector3, plane_point: Vector3) -> Transform3D:

构建相对指定平面的反射 Transform3D。

参数:

名称 说明
plane_normal 平面法线;函数会归一化。零向量时返回 Transform3D.IDENTITY。
plane_point 平面上的任意一点。

返回:将世界点反射到平面另一侧的 Transform3D。

reflect_point

  • API:public
  • 首次版本:8.0.0
static func reflect_point(point: Vector3, plane_normal: Vector3, plane_point: Vector3) -> Vector3:

将点按指定平面反射。

参数:

名称 说明
point 待反射的世界点。
plane_normal 平面法线;函数会归一化。零向量时返回原点值。
plane_point 平面上的任意一点。

返回:反射后的世界点。

reflect_direction

  • API:public
  • 首次版本:8.0.0
static func reflect_direction(direction: Vector3, plane_normal: Vector3) -> Vector3:

将方向向量按指定平面法线反射。

参数:

名称 说明
direction 待反射方向;不会被额外归一化。
plane_normal 平面法线;函数会归一化。零向量时返回原方向。

返回:反射后的方向向量。

reflect_transform

  • API:public
  • 首次版本:8.0.0
static func reflect_transform( transform: Transform3D, plane_normal: Vector3, plane_point: Vector3 ) -> Transform3D:

将 Transform3D 的 basis 与 origin 一起按指定平面反射。

参数:

名称 说明
transform 待反射 Transform3D。
plane_normal 平面法线;函数会归一化。零向量时返回原 Transform。
plane_point 平面上的任意一点。

返回:反射后的 Transform3D。

intersect_ray_plane

  • API:public
  • 首次版本:8.0.0
static func intersect_ray_plane( ray_origin: Vector3, ray_direction: Vector3, plane_normal: Vector3, plane_point: Vector3, max_distance: float = -1.0, face_normal_to_ray: bool = true ) -> Dictionary:

计算射线与平面的交点。 返回字典中的 distance 使用归一化后的 ray_direction 计算;当 face_normal_to_ray 为 true 时, 返回 normal 会朝向射线来源,便于后续表面放置、预览朝向或命中提示使用。

参数:

名称 说明
ray_origin 射线起点。
ray_direction 射线方向;函数会归一化。
plane_normal 平面法线;函数会归一化。
plane_point 平面上的任意一点。
max_distance 最大命中距离;小于等于 0 时不限制。
face_normal_to_ray 是否让返回法线朝向射线来源。

返回:命中报告。

结构:

  • return: Dictionary,包含 ok: bool、reason: StringName、position: Vector3、normal: Vector3、distance: float、ray_origin: Vector3 和 ray_direction: Vector3。

make_basis_from_up_and_z_hint

  • API:public
  • 首次版本:8.0.0
static func make_basis_from_up_and_z_hint( up_axis: Vector3, z_axis_hint: Vector3 = Vector3.BACK ) -> Basis:

用目标 Y 轴和候选 Z 轴构建稳定正交 basis。 适合把物体局部 Y 轴贴合表面法线,同时尽量保持原本局部 Z 轴朝向。 z_axis_hint 与 up_axis 近似平行时,会自动选择稳定的兜底轴。

参数:

名称 说明
up_axis 目标局部 Y 轴方向。
z_axis_hint 期望局部 Z 轴尽量接近的方向。

返回:正交 basis;输入无效时返回 Basis.IDENTITY。

apply_scale_axis_mode

  • API:public
  • 首次版本:8.0.0
static func apply_scale_axis_mode( weight: Vector3, mode: ScaleAxisMode = ScaleAxisMode.UNIFORM ) -> Vector3:

按轴向锁定模式归一 3D 缩放插值权重。 该方法只处理权重复制关系,不钳制 0 到 1 范围;调用方可以用超出范围的权重做外插。 输入包含非有限数时返回 Vector3.ZERO。

参数:

名称 说明
weight 原始 X/Y/Z 权重。
mode 轴向锁定模式。

返回:应用于 X/Y/Z 的权重。

interpolate_scale

  • API:public
  • 首次版本:8.0.0
static func interpolate_scale( min_scale: Vector3, max_scale: Vector3, weight: Vector3, mode: ScaleAxisMode = ScaleAxisMode.UNIFORM ) -> Vector3:

按轴向锁定模式在两个 3D 缩放向量之间插值。 输入包含非有限数时返回 Vector3.ONE。该方法不钳制权重,也不限制缩放正负。

参数:

名称 说明
min_scale 起始缩放向量。
max_scale 结束缩放向量。
weight 原始 X/Y/Z 插值权重。
mode 轴向锁定模式。

返回:插值后的缩放向量。

snap_point_to_plane_grid

  • API:public
  • 首次版本:8.0.0
static func snap_point_to_plane_grid( point: Vector3, plane_normal: Vector3, grid_step: float, plane_origin: Vector3 = Vector3.ZERO ) -> Dictionary:

在平面切向网格上吸附点,同时保留点到平面的法线距离。 grid_step 小于等于 0 或输入包含非有限数时返回 ok=false,并给出稳定零向量结果。

参数:

名称 说明
point 要吸附的世界点。
plane_normal 平面法线;函数会归一化。
grid_step 切向网格间距。
plane_origin 网格原点。

返回:吸附报告。

结构:

  • return: Dictionary,包含 ok: bool、reason: StringName、point: Vector3、normal: Vector3、x_axis: Vector3、z_axis: Vector3、grid_step: float、normal_distance: float、x_distance: float 和 z_distance: float。

move_local_point_to_world

  • API:public
  • 首次版本:8.0.0
static func move_local_point_to_world( transform: Transform3D, local_point: Vector3, world_point: Vector3 ) -> Transform3D:

平移 Transform3D,使指定本地锚点落到目标世界点。 常用于把模型底部、抓取点、吸附点或自定义 pivot 对齐到命中位置。

参数:

名称 说明
transform 原始世界 Transform3D。
local_point transform 本地空间中的锚点。
world_point 锚点应对齐到的世界点。

返回:平移后的 Transform3D;输入无效时返回原 Transform。