Blender Git Loki

Git Commits -> Revision ae9dcb3

Revision ae9dcb3 by Brecht Van Lommel (master)
August 27, 2005, 13:45 (GMT)


Update SConscript.
Fix some warnings.
Merge with latest soc code.

What changed in IK lib:

Fully restructured, with components now as follows:
- IK_Solver: C <=> C++ interface
- IK_QSegment: base class for bone/segment with 0
to 3 DOF
- IK_QTask: base class for a task (currently there's
a position and a rotation task)
- IK_QJacobian: the Jacobian matrix, with SVD
decomposition, damping, etc
- IK_QJacobianSolver: the iterative solver

The exponential map parametrization is no longer used,
instead we have now:
- 3DOF and 2DOF XZ segments: directly update matrix
with Rodrigues' formula
- Other: Euler angles (no worries about singularities
here)

Computation of the Jacobian inverse has also changed:
- The SVD algorithm is now based on LAPACK code,
instead of NR, to avoid some problems with rounding
errors.
- When the problem is underconstrained (as is the case
most of the time), the SVD is computed for the transpose
of the Jacobian (faster).
- A new damping algorithm called the Selectively Damped
Least Squares is used, result in faster and more
stable convergence.
- Stiffness is implemented as if a weighted psuedo-inverse
was used.

Tree structure support.

Rotation limits:
- 3DOF and 2DOF XZ segments limits are based on a swing
(direct axis-angle over XZ) and twist/roll (rotation
over Y) decomposition. The swing region is an ellipse
on a sphere.
- Rotation limits are implemented using an inner clamping
loop: as long as there is a violation, a violating DOF
is clamped and removed from the Jacobian, and the solution
is recomputed.

Convergence checking is based now on the max norm of angle
change, or the maximum number of iterations.

Commit Details:

Full Hash: ae9dcb3dc2f36f9ae6f2ca94dedc34c681b86045
SVN Revision: 5208
Parent Commit: fa0bbaf
Lines Changed: +384, -491

12 Modified Paths:

/intern/iksolver/intern/IK_QJacobian.cpp (+12, -88) (Diff)
/intern/iksolver/intern/IK_QJacobian.h (+4, -9) (Diff)
/intern/iksolver/intern/IK_QJacobianSolver.cpp (+6, -14) (Diff)
/intern/iksolver/intern/IK_QJacobianSolver.h (+4, -11) (Diff)
/intern/iksolver/intern/IK_QSegment.cpp (+0, -3) (Diff)
/intern/iksolver/intern/IK_QTask.cpp (+1, -3) (Diff)
/intern/iksolver/intern/IK_Solver.cpp (+1, -2) (Diff)
/intern/iksolver/intern/TNT/svd.h (+341, -357) (Diff)
/intern/iksolver/intern/TNT/tntmath.h (+6, -1) (Diff)
/intern/iksolver/SConscript (+3, -3) (Diff)
/intern/moto/include/MT_Point3.h (+1, -0) (Diff)
/intern/moto/include/MT_Point3.inl (+5, -0) (Diff)
Tehnyt: Miika HämäläinenViimeksi päivitetty: 07.11.2014 14:18MiikaH:n Sivut a.k.a. MiikaHweb | 2003-2021