Curve3D¶
继承: Resource < RefCounted < Object
描述3D空间中的贝塞尔曲线。
描述¶
此类描述3D空间中的贝塞尔曲线。它主要用于为Route赋予形状,但可以手动采样用于其他目的。
它沿曲线保留一个预计算点的缓存,以加快进一步的计算。
属性¶
|
||
|
||
|
||
|
方法¶
void |
add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1) |
void |
|
get_baked_length() const |
|
get_baked_points() const |
|
get_baked_tilts() const |
|
get_baked_up_vectors() const |
|
get_closest_offset(to_point: Vector3) const |
|
get_closest_point(to_point: Vector3) const |
|
get_point_in(idx: int) const |
|
get_point_out(idx: int) const |
|
get_point_position(idx: int) const |
|
get_point_tilt(idx: int) const |
|
void |
remove_point(idx: int) |
sample_baked(offset: float = 0.0, cubic: bool = false) const |
|
sample_baked_up_vector(offset: float, apply_tilt: bool = false) const |
|
sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const |
|
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) |
tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
|
tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const |
属性说明¶
两个相邻缓存点之间的距离(以米为单位)。更改它会强制在下一次调用get_baked_points()或get_baked_length()函数时重新计算缓存。距离越小,缓存中的点越多,消耗的内存也越多,因此要小心使用。
如果true,并且曲线有2个以上的控制点,则最后一个点和第一个点将循环连接。
描述曲线的点数。
bool up_vector_enabled = true 🔗
如果true,则曲线将烘烤用于定向的向量。这在RouteMove.rotation_mode设置为RouteMove.ROTATION_ORIENTED时使用。更改它会强制重新计算缓存。
方法说明¶
void add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1) 🔗
添加一个相对于曲线自身位置具有指定position的点,控制点in和out。将新点附加到点列表的末尾。
如果给定index,则将新点插入到由indexindex标识的现有点之前。从index开始的每个现有点都将在点列表中进一步向下移动。索引必须大于或等于0,并且不得超过该行中现有点的数量。参见point_count。
void clear_points() 🔗
从曲线中删除所有点。
float get_baked_length() const 🔗
根据缓存的点返回曲线的总长度。给定足够的密度(参见bake_interval),它应该足够近似。
PackedVector3Array get_baked_points() const 🔗
以PackedVector3Array的形式返回点的缓存。
PackedFloat32Array get_baked_tilts() const 🔗
以PackedFloat32Array的形式返回倾斜缓存。
PackedVector3Array get_baked_up_vectors() const 🔗
将向上向量的缓存作为PackedVector3Array返回。
如果up_vector_enabled为false,则缓存为空。
float get_closest_offset(to_point: Vector3) const 🔗
返回最接近to_point的偏移量。此偏移量用于sample_baked()或sample_baked_up_vector()。
to_point必须在此曲线的局部空间中。
Vector3 get_closest_point(to_point: Vector3) const 🔗
返回烘焙段(在曲线的局部空间中)上最近的点到to_point。
to_point必须在此曲线的局部空间中。
Vector3 get_point_in(idx: int) const 🔗
返回控制点通往顶点的位置idx。返回的位置相对于顶点idx。如果索引越界,函数向控制台发送错误,并返回(0,0,0)。
Vector3 get_point_out(idx: int) const 🔗
返回控制点引出顶点的位置idx。返回的位置相对于顶点idx。如果索引越界,函数向控制台发送错误,并返回(0,0,0)。
Vector3 get_point_position(idx: int) const 🔗
返回顶点idx的位置。如果索引越界,函数向控制台发送错误,并返回(0,0,0)。
float get_point_tilt(idx: int) const 🔗
返回点idx的倾斜角弧度。如果索引越界,函数会向控制台发送错误,并返回0。
从曲线中删除点idx。如果idx超出范围,则向控制台发送错误。
Vector3 sample(idx: int, t: float) const 🔗
返回顶点idx和顶点idx+1之间的位置,其中t控制该点是否是第一个顶点(t=0.0)、最后一个顶点(t=1.0)或介于两者之间。t的值超出范围(0.0>=t<=1)会给出奇怪但可预测的结果。
如果idx越界,则将其截断到第一个或最后一个顶点,并忽略t。如果曲线没有点,则函数向控制台发送错误,并返回(0,0,0)。
Vector3 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
返回曲线中位于offset位置的点,其中offset以沿曲线的3D单位测量距离。为此,它找到offset介于两者之间的两个缓存点,然后插值值。如果cubic设置为true,则此插值为三次,如果设置为false,则为线性。
三次插值倾向于更好地跟随曲线,但线性更快(通常足够精确)。
Vector3 sample_baked_up_vector(offset: float, apply_tilt: bool = false) const 🔗
返回曲线中offset位置的向上向量,其中offset以沿曲线的3D单位测量距离。为此,它会找到offset介于两者之间的两个缓存向上向量,然后对值进行插值。如果apply_tilt为true,则将插值倾斜应用于插值向上向量。
如果曲线没有向上向量,则函数向控制台发送错误,并返回(0,1,0)。
Transform3D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const 🔗
返回一个Transform3D,其中原始作为点位置,basis. x作为侧向向量,basis.y作为向上向量,basis.z作为向前向量。当曲线长度为0时,没有合理的方法来计算旋转,所有向量都与全局空间轴对齐。另请参见sample_baked()。
Vector3 samplef(fofs: float) const 🔗
返回顶点fofs的位置。它使用fofs的整数部分作为idx调用sample(),并使用其小数部分作为t。
void set_point_in(idx: int, position: Vector3) 🔗
设置指向顶点的控制点的位置idx。如果索引越界,函数会向控制台发送错误。该位置相对于顶点。
void set_point_out(idx: int, position: Vector3) 🔗
设置控制点指向顶点的位置idx。如果索引越界,函数会向控制台发送错误。该位置相对于顶点。
void set_point_position(idx: int, position: Vector3) 🔗
设置顶点idx的位置。如果索引超出范围,该函数将向控制台发送错误。
void set_point_tilt(idx: int, tilt: float) 🔗
设置点idx的倾斜角(弧度)。如果索引超出范围,函数将向控制台发送错误。
倾斜控制沿着路径移动的物体沿观察轴的旋转。在控制RouteMove的曲线的情况下,该倾斜是RouteMove计算的自然倾斜的偏移量。
PackedVector3Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
返回沿曲线的点列表,具有曲率控制的点密度。也就是说,较曲线的部分将比较直的部分具有更多的点。
这种近似在每个点之间形成直线段,然后细分这些段,直到得到的形状足够相似。
max_stages控制曲线段在被认为足够近似之前可能面临的细分数量。每个细分将段分成两半,因此默认的5个阶段可能意味着每个曲线段最多32个细分。小心增加!
tolerance_degrees控制在细分段之前,段的中点可能偏离真实曲线多少度。
PackedVector3Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const 🔗
返回曲线上密度几乎一致的点列表。max_stages控制曲线段在被认为足够近似之前可能面临的细分数量。每个细分将段分成两半,因此默认的5个阶段可能意味着每个曲线段最多32个细分。小心增加!
tolerance_length控制两个相邻点之间的最大距离,在段必须被细分之前。