Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
IterateIK3D
Наследует: ChainIK3D < IKModifier3D < SkeletonModifier3D < Node3D < Node < Object
Наследуется от: CCDIK3D, FABRIK3D, JacobianIK3D
SkeletonModifier3D, позволяющий приблизиться к цели путем повторения небольших вращений.
Описание
Базовый класс SkeletonModifier3D предназначен для достижения цели путем повторения небольших вращений.
Каждая цепочка костей (настройка) имеет один эффектор, который обрабатывается в порядке списка настроек. Для каждого сустава можно установить некоторые ограничения.
Примечание: Все методы в этом классе принимают параметр index. Этот параметр указывает, какую запись в списке настроек следует вернуть, если IK имеет несколько записей (например, settings/<index>/target_node).
Свойства
|
||
|
||
|
||
|
||
|
Методы
get_joint_limitation(index: int, joint: int) const |
|
get_joint_limitation_right_axis(index: int, joint: int) const |
|
get_joint_limitation_right_axis_vector(index: int, joint: int) const |
|
get_joint_limitation_rotation_offset(index: int, joint: int) const |
|
get_joint_rotation_axis(index: int, joint: int) const |
|
get_joint_rotation_axis_vector(index: int, joint: int) const |
|
get_target_node(index: int) const |
|
void |
set_joint_limitation(index: int, joint: int, limitation: JointLimitation3D) |
void |
set_joint_limitation_right_axis(index: int, joint: int, direction: SecondaryDirection) |
void |
set_joint_limitation_right_axis_vector(index: int, joint: int, vector: Vector3) |
void |
set_joint_limitation_rotation_offset(index: int, joint: int, offset: Quaternion) |
void |
set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) |
void |
set_joint_rotation_axis_vector(index: int, joint: int, axis_vector: Vector3) |
void |
set_target_node(index: int, target_node: NodePath) |
Описания свойств
float angular_delta_limit = 0.034906585 🔗
Максимальное значение, на которое каждая кость может повернуться за одну итерацию.
Примечание: Это ограничение применяется на каждой итерации. Например, если max_iterations равно 4 и angular_delta_limit равно 5 градусам, то максимальное возможное вращение за один кадр составляет 20 градусов.
Если false, результат вычисляется на основе результата IterateIK3D предыдущего кадра в качестве начального состояния.
Если true, результат IterateIK3D предыдущего кадра отбрасывается. В этот момент новый результат вычисляется на основе положения кости без учета IterateIK3D в качестве начального состояния. Это означает, что результат всегда будет равен, пока целевая позиция и предыдущая позиция кости совпадают. Однако, если значения angular_delta_limit и max_iterations установлены слишком мало, конечная кость цепочки никогда не достигнет цели.
Количество итераций, используемых решателем обратной кинематики для получения более точных результатов.
Минимальное расстояние между конечной костью и целью. Если расстояние меньше этого значения, решатель обратной кинематики прекращает дальнейшие итерации.
Количество настроек.
Описания метода
JointLimitation3D get_joint_limitation(index: int, joint: int) const 🔗
Возвращает ограничение по суставу в joint в списке суставов костной цепи.
SecondaryDirection get_joint_limitation_right_axis(index: int, joint: int) const 🔗
Возвращает ограничение по оси правого сустава в точке joint в списке суставов костной цепи.
Vector3 get_joint_limitation_right_axis_vector(index: int, joint: int) const 🔗
Возвращает вектор правой оси ограничения сустава в точке joint в списке суставов костной цепи.
Если get_joint_limitation_right_axis() равен SkeletonModifier3D.SECONDARY_DIRECTION_NONE, этот метод возвращает Vector3(0, 0, 0).
Quaternion get_joint_limitation_rotation_offset(index: int, joint: int) const 🔗
Возвращает смещение вращения ограничения сустава в joint в списке суставов цепочки костей.
Вращение выполняется в локальном пространстве, которое строится по направлению кости (как правило, от родителя к потомку) в качестве оси +Y и get_joint_limitation_right_axis_vector() в качестве оси +X.
Если оси +X и +Y не ортогональны, ось +X неявно изменяется, чтобы сделать ее ортогональной.
Также, если длина get_joint_limitation_right_axis_vector() равна нулю, пространство создается путем вращения эталонной позы с использованием кратчайшей дуги, которая поворачивает ось +Y эталонной позы, чтобы она соответствовала направлению кости.
В данном случае эталонной позой является поза кости непосредственно перед обработкой обратной кинематики (IK).
RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗
Возвращает ось вращения в joint в списке суставов цепочки костей.
Vector3 get_joint_rotation_axis_vector(index: int, joint: int) const 🔗
Возвращает вектор оси вращения для указанного сустава в костной цепи. Этот вектор представляет ось, вокруг которой может вращаться сустав. Он определяется на основе оси вращения, заданной для сустава.
Если get_joint_rotation_axis() равен SkeletonModifier3D.ROTATION_AXIS_ALL, этот метод возвращает Vector3(0, 0, 0).
NodePath get_target_node(index: int) const 🔗
Возвращает целевой узел, до которого пытается добраться конечная кость.
void set_joint_limitation(index: int, joint: int, limitation: JointLimitation3D) 🔗
Устанавливает ограничение на количество суставов в joint в списке суставов костной цепи.
void set_joint_limitation_right_axis(index: int, joint: int, direction: SecondaryDirection) 🔗
Устанавливает ограничение по оси вращения сустава справа в точке joint в списке суставов костной цепи.
void set_joint_limitation_right_axis_vector(index: int, joint: int, vector: Vector3) 🔗
Устанавливает необязательный вектор оси ограничения сустава справа в joint в списке суставов костной цепи.
void set_joint_limitation_rotation_offset(index: int, joint: int, offset: Quaternion) 🔗
Устанавливает смещение вращения ограничения сустава в joint в списке суставов цепочки костей.
Вращение выполняется в локальном пространстве, которое строится по направлению кости (как правило, от родителя к потомку) в качестве оси +Y и get_joint_limitation_right_axis_vector() в качестве оси +X.
Если оси +X и +Y не ортогональны, ось +X неявно изменяется, чтобы сделать её ортогональной.
Также, если длина get_joint_limitation_right_axis_vector() равна нулю, пространство создаётся путём вращения эталонной позы с использованием кратчайшей дуги, которая поворачивает ось +Y эталонной позы в соответствии с направлением кости.
В данном случае эталонной позой является поза кости непосредственно перед обработкой обратной кинематики (IK).
void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗
Устанавливает ось вращения в joint в списке суставов цепочки костей.
Оси основаны на пространстве опорной позы; если axis равно SkeletonModifier3D.ROTATION_AXIS_CUSTOM, вы можете указать любую ось.
Здесь опорной позой является поза кости непосредственно перед обработкой IK.
Примечание: Ось вращения и вектор направления вращения не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку ChainIK3D не учитывает силы скручивания.
void set_joint_rotation_axis_vector(index: int, joint: int, axis_vector: Vector3) 🔗
Задает вектор оси вращения для указанного сустава в костной цепи.
Этот вектор нормализуется внутренним процессом и представляет ось, вокруг которой может вращаться костная цепь.
Если длина вектора равна 0, он считается синонимом SkeletonModifier3D.ROTATION_AXIS_ALL.
void set_target_node(index: int, target_node: NodePath) 🔗
Задает целевой узел, до которого пытается добраться конечная кость.