hkaPoseMatchingUtility.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 HK_POSE_MATCHING_UTILITY_H
  9. #define HK_POSE_MATCHING_UTILITY_H
  10. class hkaAnimationBinding;
  11. /// This utility class acts as a database of poses.
  12. /// It can be searched efficently to find as close a match as possible to any given pose.
  13. /// This is particularly useful when trying to find an appropriate get up pose for a ragdoll.
  14. class hkaPoseMatchingUtility
  15. {
  16. public:
  17. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ANIMATION, hkaPoseMatchingUtility);
  18. /// Initialize the utility.
  19. /// The three bone indices here for the frame of reference when matching poses
  20. /// When matching rotation around the up axis is ignored.
  21. hkaPoseMatchingUtility( hkInt16 rootBoneIdx, hkInt16 otherBoneIdx, hkInt16 anotherBoneIdx, const hkVector4& upAxisMS );
  22. /// Find the best match for the input pose
  23. /// returns the index of the match in the array or -1 if no match found
  24. /// err gives and indication of how close this match is
  25. int findBestCandidatePoseIndex( const hkQsTransform* poseModelSpace , hkReal& err ) const;
  26. /// Add this pose as a getup pose
  27. /// The pose is sampled for a reference frame and the binding and time are stored with it
  28. /// The storage space for each pose is very small (quaternion + pointer + real)
  29. /// Returns the index associated with the newly added pose
  30. int addCandidatePose(const hkQsTransform* poseModelSpace, const hkaAnimationBinding* binding, hkReal time);
  31. /// Compute the world-from-model transform for a ragdoll in worldspace to best match a given pose in model space.
  32. /// The resultant ragdollWorldFromModel is the transform that when applied to the animation pose, aligns it with the ragdoll.
  33. /// The resultant animWorldFromModel is the same transform but with the rotation restricted to only be 
  34. /// around the given axis (typically Y).
  35. void computeReferenceFrame(const hkQsTransform* animPoseModelSpace, const hkQsTransform* ragdollPoseWorldSpace, hkQsTransform& animWorldFromModel, hkQsTransform& ragdollWorldFromModel) const;
  36. struct CandidatePoseInfo
  37. {
  38. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIMATION, hkaPoseMatchingUtility::CandidatePoseInfo );
  39. hkQuaternion m_reference; // The key used to match on
  40. const hkaAnimationBinding* m_binding; // A copy of the binding for the original animation
  41. hkReal m_time; // The local time the animation was sampled at
  42. };
  43. /// A set of potential poses
  44. hkArray< CandidatePoseInfo > m_candidatePoses;
  45. private:
  46. void computeOrientation(const hkQsTransform* poseModelSpace, hkQuaternion& out) const;
  47. // Rotation around this axis is always allowed. (Usually set to up)
  48. hkVector4 m_rotationAxis;
  49. hkInt16 m_rootBoneIdx;   // Bone to match
  50. hkInt16 m_otherBoneIdx;   // Main body axis
  51. hkInt16 m_anotherBoneIdx; // Another axis
  52. };
  53. #endif // HK_POSE_MATCHING_UTILITY_H
  54. /*
  55. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  56. * Confidential Information of Havok.  (C) Copyright 1999-2009
  57. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  58. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  59. * rights, and intellectual property rights in the Havok software remain in
  60. * Havok and/or its suppliers.
  61. * Use of this software for evaluation purposes is subject to and indicates
  62. * acceptance of the End User licence Agreement for this product. A copy of
  63. * the license is included with this software and is also available at www.havok.com/tryhavok.
  64. */