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.

IterateIK3D

Eredita: ChainIK3D < IKModifier3D < SkeletonModifier3D < Node3D < Node < Object

Ereditato da: CCDIK3D, FABRIK3D, JacobianIK3D

A SkeletonModifier3D to approach the goal by repeating small rotations.

Descrizione

Classe base di SkeletonModifier3D per raggiungere l'obiettivo ripetendo piccole rotazioni.

Ogni catena di ossa (impostazione) ha un effettore, che è elaborato nell'ordine dell'elenco delle impostazioni. È possibile impostare alcune limitazioni per ogni articolazione.

Nota: Tutti i metodi di questa classe accettano un parametro index. Questo parametro specifica quale voce nell'elenco delle impostazioni restituire, se l'IK ha più voci (ad esempio, settings/<index>/target_node).

Proprietà

float

angular_delta_limit

0.034906585

bool

deterministic

false

int

max_iterations

4

float

min_distance

0.001

int

setting_count

0

Metodi

JointLimitation3D

get_joint_limitation(index: int, joint: int) const

SecondaryDirection

get_joint_limitation_right_axis(index: int, joint: int) const

Vector3

get_joint_limitation_right_axis_vector(index: int, joint: int) const

Quaternion

get_joint_limitation_rotation_offset(index: int, joint: int) const

RotationAxis

get_joint_rotation_axis(index: int, joint: int) const

Vector3

get_joint_rotation_axis_vector(index: int, joint: int) const

NodePath

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)


Descrizioni delle proprietà

float angular_delta_limit = 0.034906585 🔗

  • void set_angular_delta_limit(value: float)

  • float get_angular_delta_limit()

The maximum amount each bone can rotate in a single iteration.

Note: This limitation is applied during each iteration. For example, if max_iterations is 4 and angular_delta_limit is 5 degrees, the maximum rotation possible in a single frame is 20 degrees.


bool deterministic = false 🔗

  • void set_deterministic(value: bool)

  • bool is_deterministic()

If false, the result is calculated from the previous frame's IterateIK3D result as the initial state.

If true, the previous frame's IterateIK3D result is discarded. At this point, the new result is calculated from the bone pose excluding the IterateIK3D as the initial state. This means the result will be always equal as long as the target position and the previous bone pose are the same. However, if angular_delta_limit and max_iterations are set too small, the end bone of the chain will never reach the target.


int max_iterations = 4 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

The number of iteration loops used by the IK solver to produce more accurate results.


float min_distance = 0.001 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

The minimum distance between the end bone and the target. If the distance is below this value, the IK solver stops any further iterations.


int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

Il numero di impostazioni.


Descrizioni dei metodi

JointLimitation3D get_joint_limitation(index: int, joint: int) const 🔗

Returns the joint limitation at joint in the bone chain's joint list.


SecondaryDirection get_joint_limitation_right_axis(index: int, joint: int) const 🔗

Returns the joint limitation right axis at joint in the bone chain's joint list.


Vector3 get_joint_limitation_right_axis_vector(index: int, joint: int) const 🔗

Returns the joint limitation right axis vector at joint in the bone chain's joint list.

If get_joint_limitation_right_axis() is SkeletonModifier3D.SECONDARY_DIRECTION_NONE, this method returns Vector3(0, 0, 0).


Quaternion get_joint_limitation_rotation_offset(index: int, joint: int) const 🔗

Restituisce l'offset di rotazione della limitazione dell'articolazione in joint nell'elenco delle articolazioni della catena d'ossa.

La rotazione è effettuata nello spazio locale, definito dalla direzione dell'osso (in generale da genitore a figlio) come asse +Y e da get_joint_limitation_right_axis_vector() come asse +X.

Se gli assi +X e +Y non sono ortogonali, l'asse +X viene implicitamente modificato per renderlo ortogonale.

Inoltre, se la lunghezza di get_joint_limitation_right_axis_vector() è zero, lo spazio viene creato ruotando la posa di riferimento attraverso l'arco più breve che ruota l'asse +Y della posa di riferimento, in modo da farlo coincidere con la direzione dell'osso.

Qui, la posa di riferimento è la posa dell'osso immediatamente prima dell'elaborazione dell'IK.


RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗

Restituisce l'asse di rotazione in joint nella lista delle articolazioni della catena d'ossa.


Vector3 get_joint_rotation_axis_vector(index: int, joint: int) const 🔗

Returns the rotation axis vector for the specified joint in the bone chain. This vector represents the axis around which the joint can rotate. It is determined based on the rotation axis set for the joint.

If get_joint_rotation_axis() is SkeletonModifier3D.ROTATION_AXIS_ALL, this method returns Vector3(0, 0, 0).


NodePath get_target_node(index: int) const 🔗

Returns the target node that the end bone is trying to reach.


void set_joint_limitation(index: int, joint: int, limitation: JointLimitation3D) 🔗

Sets the joint limitation at joint in the bone chain's joint list.


void set_joint_limitation_right_axis(index: int, joint: int, direction: SecondaryDirection) 🔗

Sets the joint limitation right axis at joint in the bone chain's joint list.


void set_joint_limitation_right_axis_vector(index: int, joint: int, vector: Vector3) 🔗

Sets the optional joint limitation right axis vector at joint in the bone chain's joint list.


void set_joint_limitation_rotation_offset(index: int, joint: int, offset: Quaternion) 🔗

Imposta l'offset di rotazione della limitazione dell'articolazione in joint nell'elenco delle articolazioni della catena d'ossa.

La rotazione è effettuata nello spazio locale, definito dalla direzione dell'osso (in generale da genitore a figlio) come asse +Y e da get_joint_limitation_right_axis_vector() come asse +X.

Se gli assi +X e +Y non sono ortogonali, l'asse +X viene implicitamente modificato per renderlo ortogonale.

Inoltre, se la lunghezza di get_joint_limitation_right_axis_vector() è zero, lo spazio viene creato ruotando la posa di riferimento attraverso l'arco più breve che ruota l'asse +Y della posa di riferimento, in modo da farlo coincidere con la direzione dell'osso.

Qui, la posa di riferimento è la posa dell'osso immediatamente prima dell'elaborazione dell'IK.


void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗

Imposta l'asse di rotazione dell'articolazione joint nell'elenco delle articolazioni della catena d'ossa.

Gli assi si basano sullo spazio della posa di riferimento. Se axis è SkeletonModifier3D.ROTATION_AXIS_CUSTOM, è possibile specificare qualsiasi asse.

Qui, la posa di riferimento è la posa dell'osso immediatamente prima dell'elaborazione dell'IK.

Nota: L'asse di rotazione e il vettore in avanti non dovrebbero essere collineari per evitare rotazioni indesiderate poiché ChainIK3D non tiene conto delle forze di torsione.


void set_joint_rotation_axis_vector(index: int, joint: int, axis_vector: Vector3) 🔗

Sets the rotation axis vector for the specified joint in the bone chain.

This vector is normalized by an internal process and represents the axis around which the bone chain can rotate.

If the vector length is 0, it is considered synonymous with SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_target_node(index: int, target_node: NodePath) 🔗

Sets the target node that the end bone is trying to reach.