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

Uno SkeletonModifier3D per avvicinarsi all'obiettivo ripetendo piccole rotazioni.

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()

La rotazione massima consentita per ciascun osso in una singola iterazione.

Nota: Questa limitazione viene applicata durante ogni iterazione. Ad esempio, se max_iterations è 4 e angular_delta_limit è 5 gradi, la rotazione massima possibile in un singolo frame è di 20 gradi.


bool deterministic = false 🔗

  • void set_deterministic(value: bool)

  • bool is_deterministic()

Se false, il risultato viene calcolato a partire dal risultato IterateIK3D del frame precedente come stato iniziale.

Se true, il risultato IterateIK3D del frame precedente viene scartato. A questo punto, il nuovo risultato viene calcolato a partire dalla posa dell'osso escludendo IterateIK3D come stato iniziale. Ciò significa che il risultato sarà sempre uguale finché la posizione di destinazione e la posa dell'osso precedente sono le stesse. Tuttavia, se angular_delta_limit e max_iterations sono impostati su valori troppo piccoli, l'osso finale della catena non raggiungerà mai la destinazione.


int max_iterations = 4 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Il numero di cicli di iterazione utilizzati dal risolutore IK per produrre risultati più accurati.


float min_distance = 0.001 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

La distanza minima tra l'osso finale e la destinazione. Se la distanza è inferiore a questo valore, il risolutore IK interrompe ulteriori iterazioni.


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 🔗

Restituisce la limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.


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

Restituisce l'asse destro della limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.


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

Restituisce il vettore dell'asse destro per la limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.

Se get_joint_limitation_right_axis() è SkeletonModifier3D.SECONDARY_DIRECTION_NONE, questo metodo restituisce 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 🔗

Restituisce il vettore dell'asse di rotazione per l'articolazione specificata nella catena d'ossa. Questo vettore rappresenta l'asse attorno al quale l'articolazione può ruotare. È determinato in base all'asse di rotazione impostato per l'articolazione.

Se get_joint_rotation_axis() è SkeletonModifier3D.ROTATION_AXIS_ALL, questo metodo restituisce Vector3(0, 0, 0).


NodePath get_target_node(index: int) const 🔗

Restituisce il nodo di destinazione che l'osso finale sta tentando di raggiungere.


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

Imposta la limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.


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

Imposta l'asse destro della limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.


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

Imposta il vettore facoltativo dell'asse destro per la limitazione dell'articolazione in joint nella lista delle articolazioni della catena d'ossa.


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) 🔗

Imposta il vettore dell'asse di rotazione per l'articolazione specificata nella catena d'ossa.

Questo vettore è normalizzato da un processo interno e rappresenta l'asse attorno al quale la catena d'ossa può ruotare.

Se la lunghezza del vettore è 0, è considerato come sinonimo di SkeletonModifier3D.ROTATION_AXIS_ALL.


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

Imposta il nodo di destinazione che l'osso finale sta tentando di raggiungere.