/** * code based on * https://github.com/benikabocha/saba/blob/master/src/Saba/Model/MMD/MMDIkSolver.cpp */ import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import type { Nullable } from "@babylonjs/core/types"; import type { MmdRuntimeBone } from "./mmdRuntimeBone"; /** * IK solver */ export interface IIkSolver { /** * Whether the IK solver is enabled */ enabled: boolean; /** * Iteration count * * The higher the value, the more accurate the IK solver will be, but the more expensive it will be */ iteration: number; } export declare class IkSolver implements IIkSolver { enabled: boolean; iteration: number; limitAngle: number; readonly ikBone: MmdRuntimeBone; readonly targetBone: MmdRuntimeBone; private readonly _ikChains; constructor(ikBone: MmdRuntimeBone, targetBone: MmdRuntimeBone); addIkChain(bone: MmdRuntimeBone, minimumAngle: Nullable, maximumAngle: Nullable): void; private static readonly _TargetPosition; private static readonly _IkPosition; solve(): void; private static readonly _TargetPosition2; private static readonly _IkPosition2; private static readonly _InversedChain; private static readonly _ChainCross; private static readonly _Rotation; private static readonly _ChainRotation; private static readonly _AnimatedRotation; private static readonly _ChainRotationMatrix; private static readonly _DecomposedRotation; private static readonly _ClampedRotation; private static readonly _FinalRotationA; private static readonly _FinalRotationB; private static readonly _Right; private static readonly _Up; private static readonly _Forward; private static readonly _InversedAnimatedRotation; private static readonly _RadToDeg; private _solveCore; private static readonly _IkPosition3; private static readonly _TargetPosition3; private static readonly _InversedChain2; private static readonly _ChainIkPosition; private static readonly _ChainTargetPosition; private static readonly _Rotation2; private static readonly _TargetVector; private static readonly _InversedAnimatedRotation2; private _solvePlane; private static readonly _TwoPi; private _normalizeAngle; private _diffAngle; private static readonly _Tests; private _decomposeToRef; }