Geometry3D

继承: Object

提供常见 3D 几何运算的方法。

描述

为创建几何形状,计算形状之间的交集,以及处理 3D 中的各种其他几何操作提供了一组辅助函数。

方法

Array[Plane]

build_box_planes(extents: Vector3)

Array[Plane]

build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Vector3.Axis = 2)

Array[Plane]

build_cylinder_planes(radius: float, height: float, sides: int, axis: Vector3.Axis = 2)

PackedVector3Array

clip_polygon(points: PackedVector3Array, plane: Plane)

PackedVector3Array

compute_convex_mesh_points(planes: Array[Plane])

Vector3

get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3)

Vector3

get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)

PackedVector3Array

get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3)

Vector3

get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3)

Variant

ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3)

PackedVector3Array

segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane])

PackedVector3Array

segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float)

PackedVector3Array

segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float)

Variant

segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3)

PackedInt32Array

tetrahedralize_delaunay(points: PackedVector3Array)


方法说明

Array[Plane] build_box_planes(extents: Vector3) 🔗

返回一个包含 6 个 Plane 的数组,这些 Plane 描述以原点为中心的盒子的边。盒子大小由 extents 定义,它代表盒子的一个(正)角(即实际大小的一半)。


Array[Plane] build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Vector3.Axis = 2) 🔗

返回一个 Plane 的数组,这些 Plane 紧密围绕着以原点为中心的多面胶囊,该胶囊半径为 radius、高度为 height。参数 sides 定义了将为胶囊的侧面部分生成多少个平面,而 lats 给出了胶囊底部和顶部的纬向步数。参数 axis 描述了胶囊的方向轴(0 代表 X,1 代表 Y,2 代表 Z)。


Array[Plane] build_cylinder_planes(radius: float, height: float, sides: int, axis: Vector3.Axis = 2) 🔗

返回一组 Plane,这些 Plane 紧密围绕着以原点为中心的多面圆柱体,该圆柱体半径为 radius、高度为 height 。参数 sides 定义了将为圆柱体的圆形部分生成多少个平面。参数 axis 描述了圆柱体的方向轴(0 代表 X,1 代表 Y,2 代表 Z)。


PackedVector3Array clip_polygon(points: PackedVector3Array, plane: Plane) 🔗

points 中的点所定义的多边形,裁剪该 plane 并返回该裁剪后的多边形的点。


PackedVector3Array compute_convex_mesh_points(planes: Array[Plane]) 🔗

计算并返回由一组 planes 定义的凸形状的所有顶点。


Vector3 get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) 🔗

返回 3D 线段 (s1, s2) 上与 point 最近的 3D 点。返回的点始终在指定的线段内部。


Vector3 get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) 🔗

返回直线上与 point 最近的 3D 点,该直线由 (s1, s2) 定义。返回的点可能在线段 (s1, s2) 上,也可能不在,即位于线段的延长线上。


PackedVector3Array get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) 🔗

给定两个 3D 线段 (p1, p2) 和 (q1, q2),找出这两个线段见距离最近的两个点。返回 PackedVector3Array,包含 (p1, q1) 和 (p2, q2) 上的点。


Vector3 get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

返回一个 Vector3,其中包含基于 3D 位置(point)与三角形不同顶点(abc)的接近程度的权重。这对于在三角形中不同顶点的数据之间进行插值非常有用。一个示例用例是使用它在网格上平滑旋转,而不是仅仅依赖于面法线。

这里是重心坐标的更详细解释。


Variant ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

测试起始于 from、方向为 dir 的 3D 射线是否与 abc 构成的三角形相交。如果相交则返回交点 Vector3。如果不相交则返回 null


PackedVector3Array segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane]) 🔗

给定一个通过数组 planes 中的 Plane 定义的凸面体,测试线段(fromto)是否与该面体相交。如果找到交点,则返回一个 PackedVector3Array,其中包含交点和凸面体的法线。否则,返回一个空数组。


PackedVector3Array segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) 🔗

检查线段(fromto)是否与以原点为中心且高度为 height、半径为 radius 的圆柱相交。如果不相交,则返回一个空的 PackedVector3Array。如果相交,则返回的数组包含交点和圆柱体在交点处的法线。


PackedVector3Array segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float) 🔗

检查线段(fromto)是否与球心位于 sphere_position 且半径为 sphere_radius 的球体相交。如果不相交,则返回一个空的 PackedVector3Array。如果相交,则返回一个 PackedVector3Array,其中包含交点和球体在交点处的法线。


Variant segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

测试线段(fromto)是否与三角形 abc 相交。如果相交,则将交点作为 Vector3 返回。如果不相交,则返回 null


PackedInt32Array tetrahedralize_delaunay(points: PackedVector3Array) 🔗

对 3D 空间中由离散的 points 集指定的区域进行四面体化,确保没有点位于任何生成的四面体的外接球内。该方法返回一个 PackedInt32Array,其中每个四面体由 points 中的四个连续点的索引组成(即返回的数组将具有 n * 4 个元素,其中 n 是找到的四面体的数量)。如果四面体化没有成功,则返回一个空的 PackedInt32Array