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

其他游戏

开发平台:

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_DYNAMICS2_CONSTRAINT_CONSTRUCTION_KIT_H
  9. #define HK_DYNAMICS2_CONSTRAINT_CONSTRUCTION_KIT_H
  10. #include <Physics/Dynamics/Constraint/ConstraintKit/hkpGenericConstraintData.h>
  11. #include <Physics/Dynamics/Constraint/ConstraintKit/hkpGenericConstraintParameters.h>
  12. #include <Physics/Dynamics/Constraint/ConstraintKit/hkpConstraintModifier.h>
  13. class hkpConstraintModifier;
  14. class hkpConstraintMotor;
  15. /// The hkpConstraintConstructionKit allows you to create your own custom Havok constraints.
  16. class hkpConstraintConstructionKit
  17. {
  18. public:
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpConstraintConstructionKit );
  20. /// Sets up the construction kit with the specified generic constraint.
  21. void begin( hkpGenericConstraintData* constraint );
  22. //
  23. // linear constraint
  24. //
  25. /// Specifies a linear degree of freedom attached to body A, and assigns it to an axis
  26. /// the ID is used to refer to the axis later.  e.g. constrainLinearDof( id )
  27. hkpGenericConstraintData::hkpParameterIndex 
  28. setLinearDofA( const hkVector4& dofInA, int linearAxisId );
  29. /// Specifies a linear degree of freedom attached to body B, and assigns it to an axis. 
  30. /// the ID is used to refer to the axis later.  e.g. constrainLinearDof( id )
  31. hkpGenericConstraintData::hkpParameterIndex 
  32. setLinearDofB( const hkVector4& dof, int linearAxisId );
  33. /// Specifies a linear degree of freedom attached to the world, and assigns it to an axis.
  34. /// the ID is used to refer to the axis later.  e.g. constrainLinearDof( id )
  35. hkpGenericConstraintData::hkpParameterIndex 
  36. setLinearDofWorld( const hkVector4& dofInWorld, int linearAxisId );
  37. /// Constrains away linear motion in specified degree of freedom
  38. void constrainLinearDof( int linearAxisId );
  39. /// Constrains away all linear degrees of freedom.
  40. void constrainAllLinearDof();
  41. //
  42. // angular constraint
  43. //
  44. /// Specifies a basis for the angular degrees of freedom, in body A space.
  45. hkpGenericConstraintData::hkpParameterIndex
  46. setAngularBasisA( const hkMatrix3& dofBasisInA );
  47. /// Specified a basis for the angular degrees of freedom, in body B space.
  48. hkpGenericConstraintData::hkpParameterIndex
  49. setAngularBasisB( const hkMatrix3& dofBasisInB );
  50. /// Sets the angular constraint basis for A to its body frame.
  51. void setAngularBasisABodyFrame();
  52. /// Sets the angular constraint basis for B to its body frame.
  53. void setAngularBasisBBodyFrame();
  54. /// Constrains objects to only rotate around the axis from the angular bases of A and B.
  55. void constrainToAngularDof( int angularBasisAxisIndex );
  56. /// Constrains an object so that it cannot rotate relative to the second object.
  57. void constrainAllAngularDof();
  58. /// Sets the pivot point attached to body A from a point in A's body space.
  59. hkpGenericConstraintData::hkpParameterIndex
  60. setPivotA( const hkVector4& pivotInA );
  61. /// Sets the pivot point attached to body B from a point in B's body space.
  62. hkpGenericConstraintData::hkpParameterIndex
  63. setPivotB( const hkVector4& pivotInB );
  64. /// Sets the pivots attached to body A and body B from a common world space point.
  65. /// N.B. This uses the current transforms of body A and B.
  66. hkpGenericConstraintData::hkpParameterIndex
  67. setPivotsHelper( hkpRigidBody* bodyA, hkpRigidBody* bodyB, const hkVector4& pivotInWorld );
  68. //
  69. // limits, friction, motors
  70. //
  71. /// Limits linear movement on the specified axis.
  72. hkpGenericConstraintData::hkpParameterIndex
  73. setLinearLimit( int linearAxisId, hkReal min, hkReal max );
  74. /// Limits angular movement around the specified axis.
  75. hkpGenericConstraintData::hkpParameterIndex
  76. setAngularLimit( int angularBasisAxisIndex, hkReal min, hkReal max );
  77. /// Limits angular movement lie to within a cone about an axis.
  78. hkpGenericConstraintData::hkpParameterIndex
  79. setConeLimit( int angularBasisAxisIndex, hkReal angle );
  80. /// Limits angular movement about a twist axis. for best accuracy twist axis should stay in positive half of space
  81. /// defined by twist axis, plane axis and twist cross plane.  Accuracy degenerates in the negative half.
  82. hkpGenericConstraintData::hkpParameterIndex
  83. setTwistLimit( int angularBasisAxisIndexTwist, int angularBasisAxisIndexPlane, hkReal min, hkReal max );
  84. /// Adds a motor to drive the angle about the specified axis. returns and index into the motor
  85. /// array of hkpGenericConstraintDataScheme 
  86. hkpGenericConstraintData::hkpParameterIndex
  87. setAngularMotor( int angularBasisAxisIndex, hkpConstraintMotor* motor );
  88. /// Adds a motor to drive the specified axis.  returns and index into the motor
  89. /// array of hkpGenericConstraintDataScheme 
  90. hkpGenericConstraintData::hkpParameterIndex
  91. setLinearMotor( int angularBasisAxisIndex, hkpConstraintMotor* motor );
  92. /// Sets friction for angular movement around the specified axis.
  93. hkpGenericConstraintData::hkpParameterIndex
  94. setAngularFriction( int angularBasisAxisIndex, hkReal maxImpulse );
  95. /// Sets friction for linear movement on the specified axis.
  96. hkpGenericConstraintData::hkpParameterIndex
  97. setLinearFriction( int linearAxisId, hkReal maxImpulse );
  98. //
  99. // tau, damping
  100. //
  101. /// Sets the stiffness and damping of the subsequent constraints. Remember to restore it later.
  102. hkpGenericConstraintData::hkpParameterIndex
  103. setStrength( hkReal strength );
  104. /// restore the stiffness and damping back to solver defaults
  105. void restoreStrength();
  106. //
  107. // modifiers
  108. //
  109. /// Adds a callback to hkpConstraintModifier::modify to the constraint
  110. void addConstraintModifierCallback( hkpConstraintModifier *cm, int userData );
  111. // /// Adds a callback to hkpConstraintModifier::modifyRhs to the constraint
  112. // /// which modifies the Rhs ( error term ) for the previously constrained Degree Of Freedom 
  113. //void addRhsModifierCallback( hkpConstraintModifier *cm, int userData );
  114. //
  115. // commands
  116. //
  117. /// Finish construction.
  118. void end();
  119. static void HK_CALL computeConstraintInfo(const hkArray<int>& commands, hkpConstraintInfo& info);
  120. protected:
  121. hkpGenericConstraintData* m_constraint;
  122. hkpGenericConstraintDataScheme* m_scheme;
  123. int m_stiffnessReference;
  124. int m_dampingReference;
  125. // Bools to check all required data is specified, given a constraint is being requested.
  126. hkBool m_linearDofSpecifiedA[3];
  127. hkBool m_linearDofSpecifiedB[3];
  128. hkBool m_angularBasisSpecifiedA;
  129. hkBool m_angularBasisSpecifiedB;
  130. hkBool m_pivotSpecifiedA;
  131. hkBool m_pivotSpecifiedB;
  132. };
  133. #endif
  134. /*
  135. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  136. * Confidential Information of Havok.  (C) Copyright 1999-2009
  137. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  138. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  139. * rights, and intellectual property rights in the Havok software remain in
  140. * Havok and/or its suppliers.
  141. * Use of this software for evaluation purposes is subject to and indicates
  142. * acceptance of the End User licence Agreement for this product. A copy of
  143. * the license is included with this software and is also available at www.havok.com/tryhavok.
  144. */