Curve3D
继承
简要描述
描述3D空间中的贝塞尔曲线。
描述
此类描述3D空间中的贝塞尔曲线。它主要用于为Path赋予形状,但可以出于其他目的手动进行采样。它沿曲线保留了预先计算的点的缓存,以加快进一步的计算速度。
成员
类型 | 属性名 | 默认值 |
---|---|---|
float | bake_interval | 0.2 |
bool | up_vector_enabled | true |
方法
返回值类型 | 方法名称 |
---|---|
void | add_point(position: Vector3, in: Vector3 = Vector3( 0, 0, 0 ), out: Vector3 = Vector3( 0, 0, 0 ), at_position: int = -1) |
void | clear_points() |
float | get_baked_length() const |
PoolVector3Array | get_baked_points() const |
PoolRealArray | get_baked_tilts() const |
PoolVector3Array | get_baked_up_vectors() const |
float | get_closest_offset(to_point: Vector3) const |
Vector3 | get_closest_point(to_point: Vector3) const |
int | get_point_count() const |
Vector3 | get_point_in(idx: int) const |
Vector3 | get_point_out(idx: int) const |
Vector3 | get_point_position(idx: int) const |
float | get_point_tilt(idx: int) const |
Vector3 | interpolate(idx: int, t: float) const |
Vector3 | interpolate_baked(offset: float, cubic: bool = false) const |
Vector3 | interpolate_baked_up_vector(offset: float, apply_tilt: bool = false) const |
Vector3 | interpolatef(fofs: float) const |
void | remove_point(idx: int) |
void | set_point_in(idx: int, position: Vector3) |
void | set_point_out(idx: int, position: Vector3) |
void | set_point_position(idx: int, position: Vector3) |
void | set_point_tilt(idx: int, tilt: float) |
PoolVector3Array | tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
常量
成员说明
- float bake_interval
Default | 0.2 |
---|---|
setter | set_bake_interval(value) |
getter | get_bake_interval |
- bool up_vector_enabled
Default | true |
---|---|
setter | set_up_vector_enabled(value) |
getter | is_up_vector_enabled |
方法说明
- add_point add_point(position: Vector3, in: Vector3 = Vector3( 0, 0, 0 ), out: Vector3 = Vector3( 0, 0, 0 ), at_position: int = -1)
在的曲线上添加一个点
position
,并带有控制点in
和out
。 如果at_position
给出,则将点插入到at_position
点号之前,然后将该点(及其后的每个点)移动到插入点之后。如果at_position
未给出或为非法值(at_position <0
或at_position >=[get_point_count](#method-get_point_count)
),则该点将附加在点列表的末尾。
- clear_points clear_points() 从曲线中删除所有点。
- get_baked_length get_baked_length() const 根据缓存的点返回曲线的总长度。给定足够的密度(见[bake_interval]),它应该足够近似。
- get_baked_points get_baked_points() const 将点的缓存作为PoolVector3Array返回。
- get_baked_tilts get_baked_tilts() const 将倾斜的缓存作为PoolRealArray返回。
- get_baked_up_vectors get_baked_up_vectors() const
将向上向量的缓存作为PoolVector3Array返回。 如果up_vector_enabled为
false
,则缓存将为空。
- get_closest_offset get_closest_offset(to_point: Vector3) const
返回最接近的偏移量
to_point
。该偏移量应在interpolate_baked或interpolate_baked_up_vector中使用。to_point
必须在该曲线的局部空间中。
- get_closest_point get_closest_point(to_point: Vector3) const
返回最接近的点(在曲线的局部空间中)
to_point
。to_point
必须在该曲线的局部空间中。
- get_point_count get_point_count() const 返回描述曲线的点数。
- get_point_in get_point_in(idx: int) const
返回指向顶点的控制点的位置
idx
。如果索引超出范围,则该函数将错误发送到控制台,然后返回(0, 0, 0)
。
- get_point_out get_point_out(idx: int) const
返回从顶点导出的控制点的位置
idx
。如果索引超出范围,则该函数将错误发送到控制台,然后返回(0, 0, 0)
。
- get_point_position get_point_position(idx: int) const
返回顶点的位置
idx
。如果索引超出范围,则该函数将错误发送到控制台,然后返回(0, 0, 0)
。
- get_point_tilt get_point_tilt(idx: int) const
返回该点的弧度倾斜角(以弧度为单位)
idx
。如果索引超出范围,则该函数将错误发送到控制台,然后返回0
。
- interpolate interpolate(idx: int, t: float) const
返回顶点
idx
和顶点idx + 1
之间的位置,在此处t
控制该点是第一个顶点(t = 0.0)
,最后一个顶点(t = 1.0)
,还是之间。若t
值超出范围(0.0 >= t <=1
)则给出一个奇怪但可预测的结果。 idx + 1tt = 0.0t = 1.0t0.0 >= t <=1 如果idx
超出范围,则将其截断到第一个或最后一个顶点,并将t
忽略。如果曲线没有点,则该函数将错误发送到控制台,并返回(0, 0, 0)
。
- interpolate_baked interpolate_baked(offset: float, cubic: bool = false) const
在返回在
offset
位置处曲线中的点,其中offset
测量沿曲线的像素距离 为此,它找到两个缓存点,offset
位于它们之间,然后进行插值。如果将cubic
设置为true
,则此插值为三次;如果将设置为false
,则此插值为线性。 三次插值倾向于更好地遵循曲线,但是线性更快(通常足够精确)。
- interpolate_baked_up_vector interpolate_baked_up_vector(offset: float, apply_tilt: bool = false) const
返回位于位置
offset
处的曲线内的向上向量,其中offset
作为沿曲线测量的3D单位距离。 为此,它找到两个缓存上向量,offset
位于它们之间,然后对这些值进行插值。如果apply_tilt
为true
,则将插值的倾斜应用于插值的上矢量。 如果曲线没有向上矢量,则该函数将错误发送到控制台,然后返回(0, 1, 0)
。
- interpolatef interpolatef(fofs: float) const
返回顶点
fofs
的位置。它调用interpolate使用fofs
的整数部分作为idx
,小数部分作为t
。
- remove_point remove_point(idx: int)
从曲线中删除
idx
点,如果idx
超出边界,返回错误。
- set_point_in set_point_in(idx: int, position: Vector3)
设置通往顶点
idx
的控制点的位置。如果索引超出范围,则该函数将错误发送到控制台。该位置是相对于顶点的。
- set_point_out set_point_out(idx: int, position: Vector3)
设置从顶点引出的控制点的位置
idx
。如果索引超出范围,则该函数将错误发送到控制台。该位置是相对于顶点的。
- set_point_position set_point_position(idx: int, position: Vector3)
设置顶点
idx
的位置。如果索引超出范围,则该函数将错误发送到控制台。
- set_point_tilt set_point_tilt(idx: int, tilt: float)
设置顶点
idx
的弧度倾斜角(以弧度为单位)。如果索引超出范围,则该函数将错误发送到控制台。 倾斜控制着沿着路径移动的对象沿观察轴的旋转。在曲线控制PathFollow的情况下,此倾斜度是PathFollow计算的自然倾斜度的偏移量。
- tessellate tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const
返回沿曲线的点列表,其曲率控制点密度。也就是说,弯曲的部分将比直线的部分具有更多的点。 这种近似使每个点之间形成直线段,然后再细分这些段,直到得到的形状足够相似为止。
max_stages
控制曲线段在被认为足够近似之前可能面临多少个细分。每个细分将线段分成两半,因此默认的5个阶段可能意味着每个曲线段最多可细分32个细分。加倍小心!tolerance_degrees
控制在片段细分之前,细分的中点可能偏离真实曲线的度数。