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

其他游戏

开发平台:

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 HKANIMATION_ANIMATION_HKMIRROREDSKELETALANIMATION_XML_H
  9. #define HKANIMATION_ANIMATION_HKMIRROREDSKELETALANIMATION_XML_H
  10. #include <Animation/Animation/Animation/hkaAnimation.h>
  11. #include <Common/Base/Math/Util/hkConvertCoordinateSpace.h>
  12. class hkaAnimationBinding;
  13. class hkaMirroredSkeleton;
  14. /// This class allows the user to wrap a child animation and 'mirror' it at runtime, so that 
  15. /// for example the data for a single 'turn left' animation can be (re)used for both 'turn left' and turn right'
  16. /// runtime playback. Please see the userguide section "Mirroring Animations" for more details.
  17. class hkaMirroredAnimation : public hkaAnimation
  18. {
  19. public:
  20. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_ANIM_COMPRESSED );
  21. /// Constructor for hkaMirroredAnimation
  22. /// param originalAnimation Animation to mirror
  23. /// param originalBinding Binding for the original animation
  24. /// param mirroredSkeleton Mirrored skeleton
  25. hkaMirroredAnimation( const hkaAnimation* originalAnimation,
  26.  const hkaAnimationBinding* originalBinding,
  27.  const hkaMirroredSkeleton* mirroredSkeleton );
  28. ~hkaMirroredAnimation();
  29. /// Create a *new* binding appropriate for this mirrored animation.  Deletion must be handled by the user.
  30. /// return A new binding appropriate for this mirrored animation.
  31. hkaAnimationBinding *createMirroredBinding();
  32. /// Destroy an hkaAnimationBinding created by the createMirroredBinding member function
  33. /// param bind Binding to destroy
  34. static void HK_CALL destroyMirroredBinding( hkaAnimationBinding *binding );
  35. /// Return original binding
  36. const hkaAnimationBinding* getOriginalBinding() const;
  37. // INHERITED FUNCTIONS
  38. virtual void sampleTracks(hkReal time, hkQsTransform* tracksOut, hkReal* floatTracksOut, hkaChunkCache* cache) const;
  39. /// Get a subset of the the first 'maxNumTracks' tracks of a pose at a given time (all tracks from 0 to maxNumTracks-1 inclusive).
  40. virtual void samplePartialTracks(hkReal time, hkUint32 maxNumTransformTracks, hkQsTransform* transformTracksOut, hkUint32 maxNumFloatTracks, hkReal* floatTracksOut, hkaChunkCache* cache) const;
  41. /// Sample individual animation tracks
  42. virtual void sampleIndividualTransformTracks( hkReal time, const hkInt16* tracks, hkUint32 numTracks, hkQsTransform* transformOut ) const;
  43. /// Sample a individual floating tracks
  44. virtual void sampleIndividualFloatTracks( hkReal time, const hkInt16* tracks, hkUint32 numTracks, hkReal* out ) const;
  45. /// Returns the number of original samples / frames of animation
  46. virtual int getNumOriginalFrames() const;
  47. /// Return the number of chunks of data required to sample a pose at time t
  48. virtual int getNumDataChunks(hkReal time) const;
  49. /// Return the maximum total size of all combined chunk data which could be returned by getDataChunks for this animation.
  50. virtual int getMaxSizeOfCombinedDataChunks() const;
  51. /// Return the chunks of data required to sample a pose at time t
  52. virtual void getDataChunks(hkReal time, DataChunk* dataChunks, int numDataChunks) const;
  53. /// Get a subset of the tracks at a given time using data chunks. Sample is calculated using pose[frameIndex] * (1 - frameDelta) + pose[frameIndex+1] * frameDelta.
  54. static void HK_CALL samplePartialWithDataChunks(hkUint32 frameIndex, hkReal frameDelta, 
  55. hkUint32 maxNumTransformTracks, hkQsTransform* transformTracksOut,
  56. hkUint32 maxNumFloatTracks, hkReal* floatTracksOut,
  57. const DataChunk* dataChunks, int numDataChunks);
  58. /// Returns the motion stored (previously extracted from the animation) at time t.
  59. /// This motion represents the absolute offset from the start of the animation.
  60. virtual void getExtractedMotionReferenceFrame(hkReal time, hkQsTransform& motionOut) const;
  61. /// Returns the change in reference frame between two times for extracted motion.
  62. virtual void getExtractedMotionDeltaReferenceFrame( hkReal time, hkReal nextTime, int loops, hkQsTransform& deltaMotionOut ) const;
  63. /// Get all annotations which occur between startTime and deltaTime
  64. /// param annotations Must be pre-allocated to the appropriate size, see getNumAnnotations
  65. /// return The number of annoatations found
  66. virtual hkUint32 getAnnotations( hkReal startTime, hkReal deltaTime, TrackAnnotation* annotationsOut, hkUint32 maxNumAnnotations = HK_INT32_MAX ) const;
  67. private:
  68. /// Mirror a pose in track space
  69. /// param poseInOut Array of transforms
  70. /// param n Maximum track to consider
  71. /// param additive True if the animation is additive
  72. void mirrorTrackPose( hkQsTransform* poseInOut, int n, hkBool additive ) const;
  73. /// Mirror a pose of individual tracks in track space
  74. /// param poseInOut Array of transforms
  75. /// param trackIndices Array of track indices
  76. /// param numTracks Number of tracks to consider
  77. /// param additive True if the animation is additive
  78. void mirrorIndividualTrackPose( hkQsTransform* poseInOut, const hkInt16* trackIndices, hkUint32 numTracks, hkBool additive) const;
  79. /// Animation tracks which are to be mirrored
  80. const hkaAnimation *m_originalAnimation;
  81. /// Original binding
  82. const hkaAnimationBinding *m_originalBinding;
  83. /// Skeleton, used to compute the mirroring transforms
  84. const hkaMirroredSkeleton *m_mirroredSkeleton;
  85. /// This is a copy of original binding hint for easy DMAing ('Additive' animations mirror differently).
  86. hkBool m_originalIsAdditive;
  87. };
  88. #endif // HKANIMATION_ANIMATION_HKMIRROREDSKELETALANIMATION_XML_H
  89. /*
  90. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  91. * Confidential Information of Havok.  (C) Copyright 1999-2009
  92. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  93. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  94. * rights, and intellectual property rights in the Havok software remain in
  95. * Havok and/or its suppliers.
  96. * Use of this software for evaluation purposes is subject to and indicates
  97. * acceptance of the End User licence Agreement for this product. A copy of
  98. * the license is included with this software and is also available at www.havok.com/tryhavok.
  99. */