hkaCcdIkSolver.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:3k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef INC_HKA_CCD_IKSOLVER_H
  9. #define INC_HKA_CCD_IKSOLVER_H
  10. #include <Common/Base/hkBase.h>
  11. class hkaPose;
  12. /// The CCD (cyclical coordinate descent) IK Solver is an iterative that solves an arbitrary number of constraints. Each constraint
  13. /// is defined as a chain of bones (defined with an start and end bone) + a target position in model space; the solver will rotate the
  14. /// bones in the chain to try to make then end bone match the target position. This is done over a number of iterations over the bones
  15. /// in the chain, incrementally reaching closer to the target.
  16. class hkaCcdIkSolver : public hkReferencedObject
  17. {
  18. public:
  19. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_RUNTIME );
  20. /// A constraint to be solved by the hkIkSolver. A constraint specified a chain of bones
  21. /// and a desired world transformation for the end bone (end effector)
  22. struct IkConstraint
  23. {
  24. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_RUNTIME, hkaCcdIkSolver::IkConstraint );
  25. /// The start bone in this chain
  26. hkInt16 m_startBone;
  27. /// The end bone in this chain
  28. hkInt16 m_endBone;
  29. /// The target position for the end bone, in model space
  30. hkVector4 m_targetMS;
  31. };
  32. /// Constuctor, it takes the number of iterations and gain used by the solver.
  33. hkaCcdIkSolver( hkInt32 iterations = 8, hkReal gain = 0.5f );
  34. /// The main method in the class, it performs the IK on the given pose.
  35. hkBool solve ( const hkArray<IkConstraint>& constraints, hkaPose& poseInOut );
  36. /// Sets the number of iterations
  37. inline void setIterations( hkInt32 number );
  38. /// Gets the number of iterations
  39. inline hkInt32 getIterations() const;
  40. /// Sets the gain factor
  41. inline void setGain( hkReal gain );
  42. /// Gets the gain factor
  43. inline hkReal getGain() const;
  44. protected:
  45. // The number of iterations of the IK solver
  46. hkInt32 m_iterations;
  47. // The gain factor to use in the IK solver
  48. hkReal m_gain;
  49. };
  50. #include <Animation/Animation/Ik/Ccd/hkaCcdIkSolver.inl>
  51. #endif // INC_HKA_CCD_IKSOLVER_H
  52. /*
  53. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  54. * Confidential Information of Havok.  (C) Copyright 1999-2009
  55. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  56. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  57. * rights, and intellectual property rights in the Havok software remain in
  58. * Havok and/or its suppliers.
  59. * Use of this software for evaluation purposes is subject to and indicates
  60. * acceptance of the End User licence Agreement for this product. A copy of
  61. * the license is included with this software and is also available at www.havok.com/tryhavok.
  62. */