Geometry
继承
简要描述
帮助节点,用于计算通用几何运算。
描述
Geometry为用户提供了一组帮助功能,用于创建几何形状,计算形状之间的相交以及处理各种其他几何操作。
方法
返回值类型 | 方法名称 |
---|---|
Array | build_box_planes(extents: Vector3) |
Array | build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: int = 2) |
Array | build_cylinder_planes(radius: float, height: float, sides: int, axis: int = 2) |
PoolVector3Array | clip_polygon(points: PoolVector3Array, plane: Plane) |
Array | clip_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
Array | clip_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array) |
PoolVector2Array | convex_hull_2d(points: PoolVector2Array) |
Array | exclude_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
Vector3 | get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) |
Vector2 | get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2) |
Vector3 | get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) |
Vector2 | get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2) |
PoolVector3Array | get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) |
PoolVector2Array | get_closest_points_between_segments_2d(p1: Vector2, q1: Vector2, p2: Vector2, q2: Vector2) |
int | get_uv84_normal_bit(normal: Vector3) |
Array | intersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
Array | intersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array) |
bool | is_point_in_circle(point: Vector2, circle_position: Vector2, circle_radius: float) |
bool | is_point_in_polygon(point: Vector2, polygon: PoolVector2Array) |
bool | is_polygon_clockwise(polygon: PoolVector2Array) |
Variant | line_intersects_line_2d(from_a: Vector2, dir_a: Vector2, from_b: Vector2, dir_b: Vector2) |
Dictionary | make_atlas(sizes: PoolVector2Array) |
Array | merge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array) |
Array | offset_polygon_2d(polygon: PoolVector2Array, delta: float, join_type: int = 0) |
Array | offset_polyline_2d(polyline: PoolVector2Array, delta: float, join_type: int = 0, end_type: int = 3) |
bool | point_is_inside_triangle(point: Vector2, a: Vector2, b: Vector2, c: Vector2) const |
Variant | ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) |
float | segment_intersects_circle(segment_from: Vector2, segment_to: Vector2, circle_position: Vector2, circle_radius: float) |
PoolVector3Array | segment_intersects_convex(from: Vector3, to: Vector3, planes: Array) |
PoolVector3Array | segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) |
Variant | segment_intersects_segment_2d(from_a: Vector2, to_a: Vector2, from_b: Vector2, to_b: Vector2) |
PoolVector3Array | 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) |
PoolIntArray | triangulate_delaunay_2d(points: PoolVector2Array) |
PoolIntArray | triangulate_polygon(polygon: PoolVector2Array) |
枚举
enum PolyBooleanOperation:
- **OPERATION_UNION = 0**
创建填充主题或剪辑多边形(或两者都填充)的区域。
- **OPERATION_DIFFERENCE = 1**
创建填充主题多边形的区域,除了填充剪辑多边形的区域。
- **OPERATION_INTERSECTION = 2**
创建填充主题和剪辑多边形的区域。
- **OPERATION_XOR = 3**
创建填充主题或剪辑多边形但不填充两者的区域。
enum PolyJoinType:
- **JOIN_SQUARE = 0**
在1 * delta
处的所有凸边连接处均一地应用平方。
- **JOIN_ROUND = 1**
尽管展平的路径永远无法完美地描绘出一条弧线,但它们由一系列弧线弦近似。
- **JOIN_MITER = 2**
有一个必要的限度,因为这抵消在加盟非常尖锐的角过长会产生,缩小“尖峰”边缘尖角连接。
enum PolyEndType:
- **END_POLYGON = 0**
使用PolyJoinType值和填充为多边形的路径来连接端点。
- **END_JOINED = 1**
使用PolyJoinType值连接端点,并以多段线填充路径。
- **END_BUTT = 2**
端点平方无扩展。
- **END_SQUARE = 3**
端点平方并以delta
单位扩展。
- **END_ROUND = 4**
端点四舍五入并以delta
单位扩展。
方法说明
- build_box_planes build_box_planes(extents: Vector3)
返回一个具有6个Plane的数组,这些数组描述以原点为中心的盒子的侧面。框的大小由extents
定义,它表示框的一个(正)角(即其实际大小的一半)。
- build_capsule_planes build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: int = 2)
返回以半径radius
和高度height
紧密围绕以原点为中心的多面囊的[平面]数组。 参数sides
定义要为胶囊的侧面部分生成多少个平面,而lats
给出胶囊底部和顶部的横向步数。 参数axis
描述了胶囊沿其定向的轴(X表示0,Y表示1,Z表示2)。
- build_cylinder_planes build_cylinder_planes(radius: float, height: float, sides: int, axis: int = 2)
返回Plane数组,该数组以半径radius
和高度height
紧密地围绕以原点为中心的多面圆柱体。 参数sides
定义将为圆柱的圆形部分生成多少个平面。 参数axis
描述圆柱体沿其定向的轴(X表示0,Y表示1,Z表示2)。
- clip_polygon clip_polygon(points: PoolVector3Array, plane: Plane)
将points
中的点定义的多边形相对于plane
进行裁剪,并返回裁剪后的多边形的点。
- clip_polygons_2d clip_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
将polygon_a
裁剪到polygon_b
上,并返回一个裁剪后的多边形数组。 这将在多边形之间执行OPERATION_DIFFERENCE。 如果polygon_b
完全重叠polygon_a
,则返回一个空数组。
如果polygon_b
用polygon_a
括起来,则返回外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- clip_polyline_with_polygon_2d clip_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)
将polyline
剪切到polygon
上,并返回一组剪切后的折线。 这会在折线和多边形之间执行OPERATION_DIFFERENCE。 该操作可以被认为是切割具有闭合形状的线。
- convex_hull_2d convex_hull_2d(points: PoolVector2Array)
给定Vector2 s数组,以逆时针顺序将凸包作为点列表返回。最后一点与第一点相同。
- exclude_polygons_2d exclude_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
相互排除由polygon_a
与polygon_b
的交集定义的公共区域(请参阅intersect_polygons_2d),并返回排除的多边形数组。 这将在多边形之间执行OPERATION_XOR。 换句话说,返回多边形之间除公共区域外的所有区域。
该操作可能会导致生成外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分它们。
- get_closest_point_to_segment get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3)
返回最接近point
的3D片段(s1
,s2
)上的3D点。返回点将始终位于指定的段内。
- get_closest_point_to_segment_2d get_closest_point_to_segment_2d(point: Vector2, s1: Vector2, s2: Vector2)
返回2D段上最接近point
的2D点(s1
,s2
)。返回的点将始终位于指定的线段内。
- get_closest_point_to_segment_uncapped get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)
返回由(s1
,s2
)定义的最接近point
的3D线上的3D点。返回的点可以在线段内(s1
,s2
)或在线段外部,即从线段延伸的线上的某个位置。
- get_closest_point_to_segment_uncapped_2d get_closest_point_to_segment_uncapped_2d(point: Vector2, s1: Vector2, s2: Vector2)
返回由(s1
,s2
)定义的最接近point
的2D线上的2D点。返回的点可以在线段内(s1
,s2
)或在线段外部,即从线段延伸的线上的某个位置。
- get_closest_points_between_segments get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3)
给定两个3D线段(p1
,p2
)和(q1
,q2
),在两个线段上找到最接近的两个点。 返回一个PoolVector3Array,其中包含(p1
,p2
)上的该点以及(q1
,q2
)。
- get_closest_points_between_segments_2d get_closest_points_between_segments_2d(p1: Vector2, q1: Vector2, p2: Vector2, q2: Vector2)
给定两个2D线段(p1
,p2
)和([q1
,q2
),找到这两个点在两个线段上找到最接近的两个点。 返回一个PoolVector2Array,其中包含(p1
,p2
)上的该点以及(q1
,q2
)。
- get_uv84_normal_bit get_uv84_normal_bit(normal: Vector3)
由引擎内部使用。
- intersect_polygons_2d intersect_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
将polygon_a
与polygon_b
相交,并返回相交多边形的数组。这将在多边形之间执行OPERATION_INTERSECTION。 换句话说,返回多边形共享的公共区域。 如果没有交集,则返回一个空数组。
该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- intersect_polyline_with_polygon_2d intersect_polyline_with_polygon_2d(polyline: PoolVector2Array, polygon: PoolVector2Array)
将polyline
与polygon
相交,并返回相交的折线数组。这会在折线和多边形之间执行OPERATION_INTERSECTION。 可以认为此操作是切成闭合形状的线。
- is_point_in_circle is_point_in_circle(point: Vector2, circle_position: Vector2, circle_radius: float)
如果point
在圆内或正好位于圆的边界上,则返回true
,否则返回false
。
- is_point_in_polygon is_point_in_polygon(point: Vector2, polygon: PoolVector2Array)
如果point
在polygon
内或正好位于在多边形边界上,则返回true
,否则返回false
。
- is_polygon_clockwise is_polygon_clockwise(polygon: PoolVector2Array)
如果多边形
的顶点按顺时针顺序排序,则返回true
,否则返回false
。
- line_intersects_line_2d line_intersects_line_2d(from_a: Vector2, dir_a: Vector2, from_b: Vector2, dir_b: Vector2)
检查两行(from_a
,dir_a
)和(from_b
,dir_b
)是否相交。如果是,则将相交点返回为Vector2。 如果没有交叉,则返回一个空的Variant。
注意:线是使用方向矢量而不是端点指定的。
- make_atlas make_atlas(sizes: PoolVector2Array)
给定表示瓦片的Vector2数组,构建一个地图集。 返回的字典有两个键:points
是Vector2的向量,指定每个图块的位置,size
包含整个图集的整体大小,如Vector2 。
- merge_polygons_2d merge_polygons_2d(polygon_a: PoolVector2Array, polygon_b: PoolVector2Array)
合并(合并)polygon_a
和polygon_b
并返回合并后的多边形数组。这将在多边形之间执行OPERATION_UNION。
该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- offset_polygon_2d offset_polygon_2d(polygon: PoolVector2Array, delta: float, join_type: int = 0)
以delta
单位(像素)对多边形
进行增大或缩小。 如果delta
为正,则使多边形向外增长。 如果delta
为负,则向内缩小多边形。 返回多边形数组,因为扩展/缩小可能会导致多个离散的多边形。 如果delta
为负并且其绝对值大约超过多边形的最小边界矩形尺寸,则返回一个空数组。
每个多边形的顶点将根据join_type
的确定取整,请参见PolyJoinType。
该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- offset_polyline_2d offset_polyline_2d(polyline: PoolVector2Array, delta: float, join_type: int = 0, end_type: int = 3)
放大或缩小polyline
通过delta
单位(像素),产生多边形。如果delta
为正,则折线向外增长。返回一个多边形数组,因为充气/放气可能会产生多个离散的多边形。如果delta
为负,返回一个空数组。
每个多边形的顶点将根据join_type
取整,请参见PolyJoinType。
每个多边形的端点将根据end_type
进行四舍五入,请参见PolyEndType。
该操作可能会产生外部多边形(边界)和内部多边形(孔),可以通过调用is_polygon_clockwise来区分。
- point_is_inside_triangle point_is_inside_triangle(point: Vector2, a: Vector2, b: Vector2, c: Vector2) const
返回point
是否在a
,b
和c
指定的三角形内。
- ray_intersects_triangle ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3)
测试以dir
的方向从from
开始的3D射线是否与a
,b
和c
指定的三角形相交。如果是,返回交点Vector3。如果没有相交,则返回空的Variant。
- segment_intersects_circle segment_intersects_circle(segment_from: Vector2, segment_to: Vector2, circle_position: Vector2, circle_radius: float)
给定二维线段(segment_from
,segment_to
),返回线段在该线段上击中位于的圆的位置(0到1之间的数字)位置circle_position
,半径为circle_radius
。 如果线段不与圆相交,则返回-1(如果延伸线段的线与圆相交,但线段不相交,情况也是如此)。
- segment_intersects_convex segment_intersects_convex(from: Vector3, to: Vector3, planes: Array)
给定一个凸包,通过Plane
数组中的Planes定义,测试(from
, to
)线段是否与该凸包相交。如果找到了交集,返回一个PoolVector3Array包含交集点和船体的法线。如果没有找到交集,则返回的数组为空。
- segment_intersects_cylinder segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float)
检查线段(from
,to
)是否与圆柱体相交,圆柱体的高度为height
,且高度为原点,半径为radius
。 如果否,则返回一个空的PoolVector3Array。 如果发生相交,则返回的数组包含相交点和相交点处的圆柱体法线。
- segment_intersects_segment_2d segment_intersects_segment_2d(from_a: Vector2, to_a: Vector2, from_b: Vector2, to_b: Vector2)
检查两个线段(from_a
,to_a
)和(from_b
,to_b
)是否相交。如果是,返回交点Vector2。如果没有交集,则返回空的Variant。
- segment_intersects_sphere segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float)
检查线段(from
,to
)是否与中心点为sphere_position
且半径为sphere_radius
的球面相交。如果否,则返回一个空的[Vector3]。 如果是,则返回一个[Vector3],该数组包含相交点和相交点处的球体法线。
- segment_intersects_triangle segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3)
测试线段(from
,to
)是否与三角形a
,b
,c
相交。如果是,返回交点Vector3。如果没有交集,则返回空的Variant。
- triangulate_delaunay_2d triangulate_delaunay_2d(points: PoolVector2Array)
对由points
的离散集合指定的区域进行三角剖分,以使任何点都不在任何所得三角形的外接圆之内。 返回一个PoolIntArray,其中每个三角形由三个连续的点索引组成,这些点索引指向points
(即返回的数组将具有n * 3
个元素,其中` n []是找到的三角形的数量)。 如果三角剖分没有成功,则返回一个空的PoolIntArray。
- triangulate_polygon triangulate_polygon(polygon: PoolVector2Array)
对由polygon
中的点指定的多边形进行三角剖分。 返回一个PoolIntArray,其中每个三角形由三个连续的点索引组成,这些索引指向polygon
(即,返回的数组将具有n * 3
个元素,其中n
是找到的三角形的数量)。 如果三角剖分没有成功,则返回一个空的PoolIntArray。