IterateIK3D
Наследует: ChainIK3D < IKModifier3D < SkeletonModifier3D < Node3D < Node < Object
Наследуется от: CCDIK3D, FABRIK3D, JacobianIK3D
SkeletonModifier3D, позволяющий приблизиться к цели путем повторения небольших вращений.
Описание
Базовый класс SkeletonModifier3D используется для достижения цели путем повторения небольших вращений.
Каждая цепочка костей (настройка) имеет один эффектор, который обрабатывается в порядке списка настроек. Для каждого сустава можно установить определенные ограничения.
Свойства
|
||
|
||
|
||
|
||
|
Методы
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 опоры кости в соответствии с направлением кости.
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 опоры кости в соответствии с направлением кости.
void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗
Устанавливает ось вращения в точке joint в списке суставов цепочки костей.
Оси основаны на пространстве Skeleton3D.get_bone_rest(). Если axis равно SkeletonModifier3D.ROTATION_AXIS_CUSTOM, вы можете указать любую ось.
Примечание: Ось вращения и вектор направления не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку 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) 🔗
Задает целевой узел, до которого пытается добраться конечная кость.