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

其他游戏

开发平台:

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_DEFAULT_EXTRACTED_MOTION_H
  9. #define HK_DEFAULT_EXTRACTED_MOTION_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Animation/Animation/Rig/hkaBone.h>
  12. #include <Animation/Animation/Motion/hkaAnimatedReferenceFrame.h>
  13. class hkaInterleavedUncompressedAnimation;
  14. extern const hkClass hkaDefaultAnimatedReferenceFrameClass;
  15. /// Default implementation for the extraction and storage of motion from an animation.
  16. /// Multiple samples can be used for motions with variable velocity. Motion can also be
  17. /// constrained to different axis, and optionally include a yaw (turn) factor.
  18. /// Objects of this class are usually generated during toolchain operations (motion extraction)
  19. /// If required at runtime, the static method "extractMotionFrom" constructs an instance of this 
  20. /// class by extracting the motion from an hkaInterleavedUncompressedAnimation.
  21. class hkaDefaultAnimatedReferenceFrame : public hkaAnimatedReferenceFrame
  22. {
  23. public:
  24. HK_DECLARE_REFLECTION();
  25. /// Options for the extractMotionFrom() utility
  26. struct MotionExtractionOptions
  27. {
  28. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_MOTION, hkaDefaultAnimatedReferenceFrame::MotionExtractionOptions );
  29. /// This represents the frame of reference to use when extracting motion
  30. /// Typically this will be something like the root track for an animation
  31. const hkQsTransform* m_referenceFrameTransforms;
  32. /// The number of reference transforms above.
  33. int m_numReferenceFrameTransforms;
  34. /// The duration of the motion represented by the reference frame.
  35. hkReal m_referenceFrameDuration;
  36. /// Number of samples to be taken from the original animation in order
  37. /// to calculate and store the motion. Minimum (and default) number is two.
  38. /// A value of -1 will be interpreted as "take as many samples as the original animation".
  39. /// Generally, use 2 samples if motion is constant linear, use multiple samples otherwise.
  40. hkInt32 m_numSamples;
  41. /// If true, vertical movements in the root bone of the animation will be considered as 
  42. /// motion of the character (and therefore extracted from the animation track). Default is false.
  43. hkBool m_allowUpDown;
  44. /// If true, forward/backward displacements in the root bone will be considered part of the
  45. /// motion of the character (and therefore extracted from the animation track). Default is true.
  46. hkBool m_allowFrontBack;
  47. /// If true, sideways displacements of the root bone will be considered part of the motion of
  48. /// the character (and therefore extracted from the animation track). Default is false.
  49. hkBool m_allowRightLeft;
  50. /// If true, changes of orientation (yaw) around the vertical axis will be considered part of the
  51. /// motion of the character (and therefore extracted from the animation track). Default is false.
  52. hkBool m_allowTurning;
  53. /// Specified which direction in world (root track) is up. Default is (0,0,1) [Z]
  54. hkVector4 m_up;
  55. /// Specified which direction in world (root track) is forward. Default is (1,0,0) [X]
  56. hkVector4 m_forward;
  57. /// Constructs an instance of this struct with default values
  58. MotionExtractionOptions ();
  59. };
  60. /// Constructs an hkDefaultExtractMotion object by sampling the root node of an interleaved animation
  61. /// Notice that it doesn't modify the animation passed as a parameter. In order to remove the extracted
  62. /// motion of an animation and associate the motion to it, you can use the hkaAnimatedReferenceFrameUtils class.
  63. hkaDefaultAnimatedReferenceFrame( const MotionExtractionOptions& options );
  64. /// Destructor; it deallocates the memory used to store the motion track
  65. ~hkaDefaultAnimatedReferenceFrame();
  66. /// Overridden from hkaDefaultAnimatedReferenceFrame, this method returns the motion extracted from the
  67. /// from the animation up to the given time. See hkaAnimatedReferenceFrame::getReferenceFrame() for details.
  68. virtual void getReferenceFrame (hkReal time, hkQsTransform& motionOut) const;
  69. /// Returns the change in motion between two times.
  70. /// The default implementation assumes the animation is a looping animation.
  71. virtual void getDeltaReferenceFrame( hkReal time, hkReal nextTime, int loops, hkQsTransform& output ) const;
  72. /// Returns the length of time this reference frame is animated for.
  73. virtual hkReal getDuration() const;
  74. public:
  75. // Primary attributes
  76. /// Up vector.
  77. hkVector4 m_up;
  78. /// Forward vector.
  79. hkVector4 m_forward;
  80. /// The duration of the animated reference frame
  81. hkReal m_duration;
  82. /// We store the motion track as a vector4 since we only need a translation and a rotational (w) component
  83. /// around the up direction. 
  84. hkVector4* m_referenceFrameSamples;
  85. /// Size of m_referenceFrameSamples array.
  86. int m_numReferenceFrameSamples;
  87. /// Used internally (for every sample) by extractMotionFrom()
  88. static void HK_CALL project(const MotionExtractionOptions& options, const hkQsTransform& rootMotion, const hkVector4& previousProjection, hkVector4& projectionOut);
  89. public:
  90. // Constructor for initialisation of vtable fixup
  91. HK_FORCE_INLINE hkaDefaultAnimatedReferenceFrame( hkFinishLoadedObjectFlag flag ) : hkaAnimatedReferenceFrame(flag) {}
  92. };
  93. #endif // HK_DEFAULT_EXTRACTED_MOTION_H
  94. /*
  95. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  96. * Confidential Information of Havok.  (C) Copyright 1999-2009
  97. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  98. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  99. * rights, and intellectual property rights in the Havok software remain in
  100. * Havok and/or its suppliers.
  101. * Use of this software for evaluation purposes is subject to and indicates
  102. * acceptance of the End User licence Agreement for this product. A copy of
  103. * the license is included with this software and is also available at www.havok.com/tryhavok.
  104. */