hkSweptTransformUtil.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_MATH_SWEPT_TRANSFORM_UTIL_H
  9. #define HK_MATH_SWEPT_TRANSFORM_UTIL_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Common/Base/Types/Physics/MotionState/hkMotionState.h>
  12. #include <Common/Base/Types/Physics/hkStepInfo.h>
  13. /// A set of useful functions changing a hkMotionState or a SweptTransform
  14. namespace hkSweptTransformUtil
  15. {
  16. /// inline version of lerp2
  17. HK_FORCE_INLINE void HK_CALL _lerp2( const hkSweptTransform& sweptTrans, hkReal t, hkQuaternion& quatOut );
  18. /// inline version of lerp2
  19. HK_FORCE_INLINE void HK_CALL _lerp2( const hkSweptTransform& sweptTrans, hkReal t, hkTransform& transformOut );
  20. /// approximate a transform given an interpolation time 
  21. void HK_CALL lerp2( const hkSweptTransform& sweptTrans, hkTime time, hkTransform& transformOut );
  22. // internal function: approximate a transform given an interpolation time with a higher accuracy time input
  23. void HK_CALL lerp2Ha( const hkSweptTransform& sweptTrans, hkTime t, hkReal tAddOn, hkTransform& transformOut );
  24. /// approximate a transform given an interpolation value r between 0.0f and 1.0f
  25. /// This uses an internal modified lerp (=linear interpolation of quaternion) functionality
  26. void HK_CALL lerp2Rel( const hkSweptTransform& sweptTrans, hkReal r, hkTransform& transformOut );
  27. /// Calculate the transform at time0
  28. HK_FORCE_INLINE void HK_CALL calcTransAtT0( const hkSweptTransform& sweptTrans, hkTransform& transformOut );
  29. /// Calculate the transform at time1
  30. HK_FORCE_INLINE void HK_CALL calcTransAtT1( const hkSweptTransform& sweptTrans, hkTransform& transformOut );
  31. /// Sets the center of mass in local space. 
  32. /// This does not change the position of the object, however it does change m_centerOfMass0 and m_centerOfMass1
  33. void HK_CALL setCentreOfRotationLocal( const hkVector4& newCenterOfRotation, hkMotionState& sweptTrans);
  34. /// Step the motion forward in time.<br>
  35. /// Notes:
  36. ///    - The angular velocity is clipped to 0.9*pi*invDeltatime
  37. HK_FORCE_INLINE void HK_CALL _stepMotionState( const hkStepInfo& stepInfo, hkVector4& linearVelocity, hkVector4& angularVelocity, hkMotionState& motionState );
  38. /// clips the input velocities
  39. HK_FORCE_INLINE void HK_CALL _clipVelocities( const hkMotionState& motionState, hkVector4& linearVelocity, hkVector4& angularVelocity );
  40. /// Allows you to integrate a motions state by not using velocities, but by specifying the next mass center position and rotation.
  41. void HK_CALL keyframeMotionState( const hkStepInfo& stepInfo, const hkVector4& pos1, const hkQuaternion& rot1, hkMotionState& motionState );
  42. /// Gets the mass center at a given time t. 
  43. HK_FORCE_INLINE void HK_CALL calcCenterOfMassAt( const hkMotionState& ms, hkTime t, hkVector4& centerOut );
  44. /// Return the velocity which was used to integrate the motion state from state 0 to state 1
  45. HK_FORCE_INLINE void HK_CALL getVelocity( const hkMotionState& ms, hkVector4& linearVelOut, hkVector4& angularVelOut );
  46. // interpolates the information of t1 to be at time t.
  47. void HK_CALL backStepMotionState( hkTime t, hkMotionState& motionState );
  48. // Internal function. Only used upon deactivation of entities
  49. void HK_CALL freezeMotionState( hkTime time, hkMotionState& motionState );
  50. // Call this if you deactive a body (otherwise numerical problems can result in strange extrapolation of body movement)
  51. HK_FORCE_INLINE void HK_CALL deactivate( hkMotionState& ms );
  52. // Internal function. Only used upon activation of entities 
  53. void HK_CALL setTimeInformation( hkTime startTime, hkReal invDeltaTime, hkMotionState& motionState);
  54. /// Warp the geometry center of both frames to position
  55. void HK_CALL warpToPosition( const hkVector4& position, hkMotionState& ms );
  56. /// Warp the orientation of both frames to rotations. Note: This changes the m_centerOfMass
  57. void HK_CALL warpToRotation( const hkQuaternion& rotation, hkMotionState& ms );
  58. /// Warp to position and orientation
  59. void HK_CALL warpTo( const hkVector4& position, const hkQuaternion& rotation, hkMotionState& ms );
  60. /// Warp to a new transform (includes both frames)
  61. void HK_CALL warpTo( const hkTransform& transform, hkMotionState& ms );
  62. // For a given delta time: Calc the relative linear movement (xyz) and the worst case angular movment (w)
  63. HK_FORCE_INLINE void HK_CALL calcTimInfo( const hkMotionState& ms0, const hkMotionState& ms1, hkReal deltaTime, hkVector4& timOut);
  64. // calc the relative angular movement for a reduced step
  65. HK_FORCE_INLINE void HK_CALL calcAngularTimInfo( const hkMotionState& ms0, const hkMotionState& ms1, hkReal deltaTime, hkVector4* deltaAngleOut0, hkVector4* deltaAngleOut1 );
  66. }
  67. #include <Common/Base/Math/SweptTransform/hkSweptTransformUtil.inl>
  68. #endif // HK_MATH_SWEPT_TRANSFORM_UTIL_H
  69. /*
  70. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  71. * Confidential Information of Havok.  (C) Copyright 1999-2009
  72. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  73. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  74. * rights, and intellectual property rights in the Havok software remain in
  75. * Havok and/or its suppliers.
  76. * Use of this software for evaluation purposes is subject to and indicates
  77. * acceptance of the End User licence Agreement for this product. A copy of
  78. * the license is included with this software and is also available at www.havok.com/tryhavok.
  79. */