Required changes for Inverse Kinematics

Added a * operator
compute from to -> adds safeties around shortestArc
conjugate -> reverses the xyz of the quaternion

IK Solver commit

Added: IKChain struct to tsshape
commands to tsshapeconstruct to create and setup ikchains
ik solvers -> ccd and fabrik, these are in their own file tsIKSolver

TODO: there needs to be some tooling added to the shape editor for this
This commit is contained in:
marauder2k7 2025-12-04 08:29:44 +00:00
parent 42e8687067
commit 9866908e99
10 changed files with 1048 additions and 1 deletions

View file

@ -342,3 +342,40 @@ QuatF & QuatF::shortestArc( const VectorF &a, const VectorF &b )
return *this;
}
QuatF& QuatF::computeRotationFromTo(const VectorF& from, const VectorF& to)
{
VectorF f = from;
VectorF t = to;
f.normalizeSafe();
t.normalizeSafe();
if (f.isZero() || t.isZero())
{
return identity();
}
F32 dot = mClampF(mDot(f, t), -1.0f, 1.0f);
// Parallel = no rotation.
if (dot > 0.9999f)
{
return identity();
}
// Opposite = pick perpendicular.
if (dot < -0.9999f)
{
VectorF axis;
if (mFabs(f.x) < mFabs(f.z))
axis.set(0, -f.z, f.y);
else
axis.set(-f.y, f.x, 0);
axis.normalizeSafe();
return set(axis, M_PI_F); // 180 degrees
}
return shortestArc(f, t);
}