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.