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

其他游戏

开发平台:

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_HK_LOOK_AT_IK_SOLVER_H
  9. #define INC_HK_LOOK_AT_IK_SOLVER_H
  10. /// This IK solver operates on a single bone (specified as a transform in model space). It rotates it so the forward axis (m_fwdLS) points towards the
  11. /// specified target (targetMS). The movement is clamped around a cone specified by m_limitAxisMS and m_limitAngle. Finally, the rotation applied by the IK
  12. /// can be weighted by a gain value (gain), in the range [0..1]. The solver returns false if the target is over limits.  Optionally, the user may specify
  13. /// individual limits for the up, down, left, and right directions of motion
  14. class hkaLookAtIkSolver : public hkReferencedObject
  15. {
  16. public:
  17. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_RUNTIME );
  18. /// Setup information passed to hkaLookAtIkSolver::solve()
  19. struct Setup
  20. {
  21. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_RUNTIME, hkaLookAtIkSolver::Setup );
  22.     /// Forward vector in the local space of the bone; must be a unit vector
  23. hkVector4 m_fwdLS;
  24. /// "Eye" position in the local space of the bone.
  25. /// Defaults to (0,0,0). If the offset is not (0,0,0) (the eye is not located
  26. /// at the joint's position), the required correction is calculated.
  27. hkVector4 m_eyePositionLS;
  28. /// Axis of the limiting cone, specified in model space; must be a unit vector
  29. hkVector4 m_limitAxisMS;
  30. /// Angle of the limiting cone; must be in range [ 0, pi ]
  31. hkReal m_limitAngle;
  32. /// Constructor
  33. Setup()
  34. {
  35. m_eyePositionLS.setZero4();
  36. }
  37. };
  38. // Setup information for optionally specifying individual range limits
  39. struct RangeLimits
  40. {
  41. /// Limiting angles in the up direction; must be in range [ -pi/2, pi/2 ]
  42. hkReal m_limitAngleUp;   // Example:  pi/4  (45deg up)
  43. hkReal m_limitAngleDown; // Example: -pi/6  (30deg down)
  44. /// Limiting angle in the side direction; must be in range [ -pi, pi ]
  45. hkReal m_limitAngleLeft; // Example:  pi/2  (90deg left)
  46. hkReal m_limitAngleRight;// Example: -pi/2  (90deg right)
  47. /// Up unit vector in model space, must be
  48. /// perpendicular to setup.m_limitAxisMS
  49. /// Side vector is calculated as cross( setup.m_limitAxisMS, m_upAxisMS )
  50. hkVector4 m_upAxisMS;
  51. };
  52. /// Solves the specified lookAt constraint. Check the documentation for hkaLookAtIkSolver for details.
  53. static hkBool HK_CALL solve ( const Setup& setup, const hkVector4& targetMS, hkReal gain, hkQsTransform& boneModelSpaceInOut, const RangeLimits* limits = HK_NULL );
  54. /// Converts from spherical to cartesian coordinates
  55. /// Like a globe: X axis near London, Y axis near China, Z axis through the North Pole
  56. /// XYZ <- rho theta phi (radius, longitude, lattitude )
  57. static void HK_CALL cartesianFromSpherical( hkVector4& sphericalInCartesianOut );
  58. /// Converts from cartesian to spherical coordinates
  59. /// Like a globe: X axis near London, Y axis near China, Z axis through the North Pole
  60. /// XYZ -> rho theta phi (radius, longitude, lattitude )
  61. static void HK_CALL sphericalFromCartesian( hkVector4& cartesianInSphericalOut );
  62. /// Wrapper for atan2 function
  63. static hkReal HK_CALL lookAtAtan2( hkReal y, hkReal x );
  64. };
  65. #endif // INC_HK_LOOK_AT_IK_SOLVER_H
  66. /*
  67. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  68. * Confidential Information of Havok.  (C) Copyright 1999-2009
  69. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  70. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  71. * rights, and intellectual property rights in the Havok software remain in
  72. * Havok and/or its suppliers.
  73. * Use of this software for evaluation purposes is subject to and indicates
  74. * acceptance of the End User licence Agreement for this product. A copy of
  75. * the license is included with this software and is also available at www.havok.com/tryhavok.
  76. */