Curve3D
Наследует: Resource < RefCounted < Object
Описывает кривую Безье в 3D пространстве.
Описание
Этот класс описывает кривую Безье в 3D пространстве. В основном он используется для придания формы Path3D, но может быть вручную выбран для других целей.
Он хранит кэш предварительно рассчитанных точек вдоль кривой для ускорения дальнейших вычислений.
Свойства
|
||
|
||
|
||
|
Методы
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, кривая запечет векторы, используемые для ориентации. Это используется, когда PathFollow3D.rotation_mode установлен в PathFollow3D.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, новая точка вставляется перед существующей точкой, идентифицированной индексом index. Каждая существующая точка, начиная с 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 🔗
Возвращает кэш векторов up как 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 измеряется как расстояние в трехмерных единицах вдоль кривой. Для этого он находит две кэшированные точки, между которыми находится offset, а затем интерполирует значения. Эта интерполяция является кубической, если cubic установлен в true, или линейной, если установлен в false.
Кубическая интерполяция имеет тенденцию лучше следовать кривым, но линейная быстрее (и часто достаточно точна).
Vector3 sample_baked_up_vector(offset: float, apply_tilt: bool = false) const 🔗
Возвращает вектор вверх внутри кривой в позиции offset, где offset измеряется как расстояние в трехмерных единицах вдоль кривой. Для этого он находит два кэшированных вектора вверх, между которыми находится 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 с origin в качестве позиции точки, basis.x в качестве бокового вектора, basis.y в качестве верхнего вектора, basis.z в качестве прямого вектора. Когда длина кривой равна 0, нет разумного способа вычислить поворот, все векторы выровнены с глобальными пространственными осями. См. также sample_baked().
Vector3 samplef(fofs: float) const 🔗
Возвращает позицию в вершине fofs. Он вызывает sample(), используя целую часть fofs как idx, а его дробную часть как 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. Если индекс выходит за пределы, функция отправляет ошибку на консоль.
Наклон управляет вращением вдоль оси взгляда, которое будет иметь объект, движущийся по пути. В случае кривой, управляющей PathFollow3D, этот наклон является смещением относительно естественного наклона, который вычисляет PathFollow3D.
PackedVector3Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Возвращает список точек вдоль кривой с контролируемой кривизной плотностью точек. То есть, более кривые части будут иметь больше точек, чем более прямые части.
Это приближение создает прямые сегменты между каждой точкой, затем подразделяет эти сегменты до тех пор, пока результирующая форма не станет достаточно похожей.
max_stages управляет количеством подразделений, с которыми может столкнуться сегмент кривой, прежде чем он будет считаться достаточно приближенным. Каждое подразделение делит сегмент пополам, поэтому 5 стадий по умолчанию могут означать до 32 подразделений на сегмент кривой. Увеличивайте с осторожностью!
capacity_degrees управляет тем, на сколько градусов средняя точка сегмента может отклоняться от реальной кривой, прежде чем сегмент придется подразделять.
PackedVector3Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const 🔗
Возвращает список точек вдоль кривой с почти равномерной плотностью. max_stages управляет количеством подразделений, с которыми может столкнуться сегмент кривой, прежде чем он будет считаться достаточно приближенным. Каждое подразделение делит сегмент пополам, поэтому 5 стадий по умолчанию могут означать до 32 подразделений на сегмент кривой. Увеличивайте с осторожностью!
capacity_length управляет максимальным расстоянием между двумя соседними точками, прежде чем сегмент придется подразделять.