hkpVelocityAccumulator.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_CONSTRAINTSOLVER2_VELOCITY_ACCUMULATOR_H
  9. #define HK_CONSTRAINTSOLVER2_VELOCITY_ACCUMULATOR_H
  10. /// This is a simplified Rigid body as it is used by the
  11. /// constraint solver.
  12. /// Note: This class has different purposes, whether it is used for setting
  13. /// up the constraint solver input (hkConstraintDate::buildJacobian()), or when it is 
  14. /// used as a solver output.
  15. class hkpVelocityAccumulator 
  16. {
  17. public:
  18. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkpVelocityAccumulator );
  19.     /// A list of possible types
  20.     enum hkpAccumulatorType
  21.     {
  22.     /// A rigid body
  23.     HK_RIGID_BODY,
  24. /// A fixed rigid body, which ignores gravity
  25. HK_KEYFRAMED_RIGID_BODY,
  26. /// A rigid body which has no gravity applied (used for character controller)
  27. HK_NO_GRAVITY_RIGID_BODY,
  28. HK_END
  29. };
  30. hkEnum<hkpAccumulatorType,hkUint8> m_type;
  31. /// set to true if coreFromWorldMatrix is the identity matrix
  32. hkBool m_matrixIsIdentity;
  33. /// An index into hkpSolverInfo::m_deactivationInfo which is taken from
  34. /// hkpRigidBodyCinfo::m_solverDeactivation
  35. hkUint32 m_deactivationClass;
  36. /// Scaling factor for gravity
  37. hkReal m_gravityFactor;
  38. /// the linear velocity
  39. hkVector4 m_linearVel;
  40. /// the angular velocity in principle axis space 
  41. hkVector4 m_angularVel;
  42. /// the inverted diagonal of the inertia tensor in local space.
  43. /// plus the w component is the inverted mass
  44. hkVector4 m_invMasses;
  45. //
  46. // Solver input accessors
  47. // 
  48. /// Get center of mass in world space. 
  49. /// Note: This only works before the constraint solver is called (e.g. in hkConstraintDate::buildJacobian())
  50. hkVector4& getCenterOfMassInWorld() { return getScratch0(); }
  51. /// Get center of mass in world space. 
  52. /// Note: This only works before the constraint solver is called (e.g. in hkConstraintDate::buildJacobian())
  53. const hkVector4& getCenterOfMassInWorld() const { return getScratch0(); }
  54. /// Get The matrix converting from world to principle axis space
  55. /// Note: This only works before the constraint solver is called (e.g. in hkConstraintDate::buildJacobian())
  56. hkRotation& getCoreFromWorldMatrix() { return m_scratch123; }
  57. /// Get The matrix converting from world to principle axis space
  58. /// Note: This only works before the constraint solver is called (e.g. in hkConstraintDate::buildJacobian())
  59. const hkRotation& getCoreFromWorldMatrix() const { return m_scratch123; }
  60. /// Get the average velocity during constraint solving multiplied by the number of substeps
  61. /// Note: this function only works after the constraint solver is called
  62. hkVector4& getSumLinearVel() { return getScratch0(); }
  63. /// Get the average velocity in principle axis space during constraint solving multiplied by the number of substeps
  64. /// Note: this function only works after the constraint solver is called
  65. hkVector4& getSumAngularVel() { return getScratch1(); }
  66. /// Get the average velocity during constraint solving multiplied by the number of substeps
  67. /// Note: this function only works after the constraint solver is called
  68. const hkVector4& getSumLinearVel() const { return getScratch0(); }
  69. /// Get the average velocity during constraint solving multiplied by the number of substeps
  70. /// Note: this function only works after the constraint solver is called
  71. const hkVector4& getSumAngularVel() const { return getScratch1(); }
  72. hkVector4& getScratch0() { return m_scratch0; }
  73. hkVector4& getScratch1() { return m_scratch123.getColumn(0); }
  74. hkVector4& getScratch2() { return m_scratch123.getColumn(1); }
  75. hkVector4& getScratch3() { return m_scratch123.getColumn(2); }
  76. const hkVector4& getScratch0() const { return m_scratch0; }
  77. const hkVector4& getScratch1() const { return m_scratch123.getColumn(0); }
  78. const hkVector4& getScratch2() const { return m_scratch123.getColumn(1); }
  79. const hkVector4& getScratch3() const { return m_scratch123.getColumn(2); }
  80. public: // internal, public needed for HK_COMPILE_TIME_ASSERT
  81. hkVector4 m_scratch0;
  82. hkRotation m_scratch123;
  83. public:
  84. /// Set this velocity accumulator to the one of a fixed object
  85. HK_FORCE_INLINE void setFixed()
  86. {
  87. m_type = hkpVelocityAccumulator::HK_KEYFRAMED_RIGID_BODY;
  88. m_matrixIsIdentity = true;
  89. m_gravityFactor = 0.0f;
  90. this->m_invMasses.setZero4();
  91. this->m_linearVel.setZero4();
  92. this->m_angularVel.setZero4();
  93. this->getCenterOfMassInWorld().setZero4();
  94. this->getCoreFromWorldMatrix().setZero();
  95. }
  96. };
  97. #endif // HK_CONSTRAINTSOLVER2_VELOCITY_ACCUMULATOR_H
  98. /*
  99. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  100. * Confidential Information of Havok.  (C) Copyright 1999-2009
  101. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  102. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  103. * rights, and intellectual property rights in the Havok software remain in
  104. * Havok and/or its suppliers.
  105. * Use of this software for evaluation purposes is subject to and indicates
  106. * acceptance of the End User licence Agreement for this product. A copy of
  107. * the license is included with this software and is also available at www.havok.com/tryhavok.
  108. */