mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-24 00:53:47 +00:00
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:
parent
42e8687067
commit
9866908e99
10 changed files with 1048 additions and 1 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue