Skip to content

Documentation / scene / TwoBoneIKSolver

Class: TwoBoneIKSolver ​

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:20

Two Bone IK solver for chains with exactly 3 joints (2 bones).

Remarks ​

This solver uses an analytical solution specifically optimized for two-bone chains like arms (shoulder-elbow-wrist) or legs (hip-knee-ankle). It's faster and more stable than iterative methods like FABRIK for this case.

The solver supports an optional pole vector to control the bending direction of the middle joint (elbow/knee).

Extends ​

Constructors ​

Constructor ​

new TwoBoneIKSolver(chain, poleVector?, poleWeight?): TwoBoneIKSolver

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:35

Create a Two Bone IK solver.

Parameters ​

chain ​

IKChain

The IK chain to solve (must have exactly 3 joints)

poleVector? ​

Vector3 = null

Optional pole vector position in world space

poleWeight? ​

number = 1

Weight of the pole vector constraint (0-1, default: 1)

Returns ​

TwoBoneIKSolver

Overrides ​

IKSolver.constructor

Properties ​

_chain ​

protected _chain: IKChain

Defined in: libs/scene/src/animation/ik/ik_solver.ts:11

The IK chain to solve

Inherited from ​

IKSolver._chain


_maxIterations ​

protected _maxIterations: number

Defined in: libs/scene/src/animation/ik/ik_solver.ts:13

Maximum number of iterations

Inherited from ​

IKSolver._maxIterations


_tolerance ​

protected _tolerance: number

Defined in: libs/scene/src/animation/ik/ik_solver.ts:15

Convergence tolerance (distance threshold)

Inherited from ​

IKSolver._tolerance

Accessors ​

chain ​

Get Signature ​

get chain(): IKChain

Defined in: libs/scene/src/animation/ik/ik_solver.ts:33

Get the IK chain.

Returns ​

IKChain

Inherited from ​

IKSolver.chain


poleVector ​

Get Signature ​

get poleVector(): Vector3

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:117

Get the pole vector position.

Returns ​

Vector3

Set Signature ​

set poleVector(value): void

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:121

Parameters ​
value ​

Vector3

Returns ​

void


poleWeight ​

Get Signature ​

get poleWeight(): number

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:136

Get the pole vector weight.

Returns ​

number

Set Signature ​

set poleWeight(value): void

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:140

Parameters ​
value ​

number

Returns ​

void

Methods ​

setMaxIterations() ​

setMaxIterations(value): void

Defined in: libs/scene/src/animation/ik/ik_solver.ts:40

Set maximum number of iterations.

Parameters ​

value ​

number

Returns ​

void

Inherited from ​

IKSolver.setMaxIterations


getMaxIterations() ​

getMaxIterations(): number

Defined in: libs/scene/src/animation/ik/ik_solver.ts:47

Get maximum number of iterations.

Returns ​

number

Inherited from ​

IKSolver.getMaxIterations


setTolerance() ​

setTolerance(value): void

Defined in: libs/scene/src/animation/ik/ik_solver.ts:54

Set convergence tolerance.

Parameters ​

value ​

number

Returns ​

void

Inherited from ​

IKSolver.setTolerance


getTolerance() ​

getTolerance(): number

Defined in: libs/scene/src/animation/ik/ik_solver.ts:61

Get convergence tolerance.

Returns ​

number

Inherited from ​

IKSolver.getTolerance


setTwistConstraint() ​

setTwistConstraint(jointIndex, minTwist, maxTwist, smoothFactor?): void

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:70

Set twist constraint for a specific joint.

Parameters ​

jointIndex ​

number

Index of the joint (0 = root, 1 = middle)

minTwist ​

number

Minimum twist angle in radians

maxTwist ​

number

Maximum twist angle in radians

smoothFactor? ​

number = 0.3

Smoothing factor [0-1] (default: 0.3)

Returns ​

void


getTwistConstraint() ​

getTwistConstraint(jointIndex): TwistConstraint

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:93

Get twist constraint for a specific joint.

Parameters ​

jointIndex ​

number

Index of the joint

Returns ​

TwistConstraint

Twist constraint or undefined if not set


removeTwistConstraint() ​

removeTwistConstraint(jointIndex): boolean

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:103

Remove twist constraint for a specific joint.

Parameters ​

jointIndex ​

number

Index of the joint

Returns ​

boolean

True if a constraint was removed


clearTwistConstraints() ​

clearTwistConstraints(): void

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:110

Clear all twist constraints.

Returns ​

void


solve() ​

solve(target): boolean

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:150

Solve the IK chain to reach the target position using Two Bone IK algorithm.

Parameters ​

target ​

Vector3

Target position for the end effector

Returns ​

boolean

True if the target is reachable, false if stretched to maximum

Overrides ​

IKSolver.solve


applyToNodes() ​

applyToNodes(weight?): void

Defined in: libs/scene/src/animation/ik/two_bone_ik_solver.ts:330

Apply the solved joint positions to scene nodes as rotations.

Parameters ​

weight? ​

number = 1

Blend weight (0 = original, 1 = full IK, default: 1)

Returns ​

void

Overrides ​

IKSolver.applyToNodes

Released under the MIT License.