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

clear_points()

float

get_baked_length() const

PackedVector3Array

get_baked_points() const

PackedFloat32Array

get_baked_tilts() const

PackedVector3Array

get_baked_up_vectors() const

float

get_closest_offset(to_point: Vector3) const

Vector3

get_closest_point(to_point: Vector3) 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

void

remove_point(idx: int)

Vector3

sample(idx: int, t: float) const

Vector3

sample_baked(offset: float = 0.0, cubic: bool = false) const

Vector3

sample_baked_up_vector(offset: float, apply_tilt: bool = false) const

Transform3D

sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const

Vector3

samplef(fofs: float) 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)

PackedVector3Array

tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const

PackedVector3Array

tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const


属性说明

float bake_interval = 0.2 🔗

  • void set_bake_interval(value: float)

  • float get_bake_interval()

两个相邻缓存点之间的距离(以米为单位)。更改它会强制在下一次调用get_baked_points()get_baked_length()函数时重新计算缓存。距离越小,缓存中的点越多,消耗的内存也越多,因此要小心使用。


bool closed = false 🔗

  • void set_closed(value: bool)

  • bool is_closed()

如果true,并且曲线有2个以上的控制点,则最后一个点和第一个点将循环连接。


int point_count = 0 🔗

  • void set_point_count(value: int)

  • int get_point_count()

描述曲线的点数。


bool up_vector_enabled = true 🔗

  • void set_up_vector_enabled(value: bool)

  • bool is_up_vector_enabled()

如果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的点,控制点inout。将新点附加到点列表的末尾。

如果给定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_enabledfalse,则缓存为空。


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


void remove_point(idx: int) 🔗

从曲线中删除点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_tilttrue,则将插值倾斜应用于插值向上向量。

如果曲线没有向上向量,则函数向控制台发送错误,并返回(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控制两个相邻点之间的最大距离,在段必须被细分之前。