hkpPointToPathConstraintData.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_POINT_TO_PATH_CONSTRAINT_H
  9. #define HK_DYNAMICS2_POINT_TO_PATH_CONSTRAINT_H
  10. #include <Physics/Dynamics/Constraint/hkpConstraintData.h>
  11. #include <Physics/ConstraintSolver/Constraint/Atom/hkpConstraintAtom.h>
  12. #include <Physics/Dynamics/Constraint/Bilateral/PointToPath/hkpParametricCurve.h>
  13. extern const hkClass hkpPointToPathConstraintDataClass;
  14. /// A constraint where one body is free to move along a specified path relative to the other. 
  15. /// Body A is the attached body, while the path is on body B.
  16. class hkpPointToPathConstraintData : public hkpConstraintData
  17. {
  18. public:  
  19. HK_DECLARE_REFLECTION();
  20. enum OrientationConstraintType
  21. {
  22. /// 
  23. CONSTRAIN_ORIENTATION_INVALID,
  24. /// 
  25. CONSTRAIN_ORIENTATION_NONE,
  26. /// 
  27. CONSTRAIN_ORIENTATION_ALLOW_SPIN,
  28. /// 
  29. CONSTRAIN_ORIENTATION_TO_PATH,
  30. /// 
  31. CONSTRAIN_ORIENTATION_MAX_ID
  32. };
  33. hkpPointToPathConstraintData();
  34. /// Destructor.
  35. virtual ~hkpPointToPathConstraintData();
  36. /// Sets the construction information with world space information.
  37. /// pathToRefBodyTransform is the transform of the path in reference body space
  38. void setInWorldSpace( const hkTransform& slidingBodyTransform, const hkTransform& referenceBodyTransform, const hkVector4& pivotWs, hkpParametricCurve* path, const hkTransform& pathToRefBodyTransform = hkTransform::getIdentity() );
  39. /// Sets the pivot and path with body space information.
  40. void setInBodySpace( const hkVector4& pivotA, const hkVector4& pivotB, hkpParametricCurve* path);
  41. ///  Set orientation constraint type. This must be one of:
  42. ///  CONSTRAIN_ORIENTATION_NONE : No angular constraints
  43. ///  CONSTRAIN_ORIENTATION_ALLOW_SPIN : Attached body constrained so that 'X' axis
  44. /// of pivot Transform (constraint space) is aligned "along" the path.
  45. ///  CONSTRAIN_ORIENTATION_TO_PATH : Attached body completely "aligned" with path
  46. /// using path direction and binormal, with 'X' axis of pivot Transform
  47. /// (constraint space) is aligned "along" the path and 'Z' axis of the Pivot
  48. /// Transform aligned with the "binormal" of the path. 
  49. inline void setOrientationType(enum OrientationConstraintType otype);
  50. ///  Set the transformation of the attached body's pivot, in the attached body's
  51. /// Local space. This is the "Constraint" space for the attached body.  This both
  52. /// sets the pivot position, and pivot orientation in this space. 
  53. /// See  setAttachedBodyPivotOrientation() for how the orientation may be used.
  54. /// The default is the Identity. 
  55. inline void setAttachedBodyPivotTransform(const hkTransform& t);
  56. ///  Set the orientation of the attached body's pivot, in the attached body's Local
  57. /// space.  This is the "Constraint" space for the attached body.  The does not
  58. /// affect the "linear"component of the constraint (keeping the pivot of the
  59. /// attached boy on the path), but affects the "angular" component of the
  60. /// constraint (which aligns the attached body with the path, if required).  If
  61. /// the OrientationType is set to CONSTRAIN_ORIENTATION_ALLOW_SPIN or
  62. /// CONSTRAIN_ORIENTATION_TO_PATH the the 'X' axis of the Pivot Transform will
  63. /// align itself "along" the path. If OrientationType is set to
  64. /// CONSTRAIN_ORIENTATION_TO_PATH then, additionally, the 'Z' axis of the Pivot
  65. /// Transform will align itself with the "binormal" of the path. The default is
  66. /// the Identity. 
  67. inline void setAttachedBodyPivotOrientation(const hkRotation& r);
  68. ///  Set the "Constraint" space for the reference body, , in the attached body's
  69. /// Local space.  This is the space in which the path is stored (i.e. a "path Space
  70. /// to Local space" Transform.  The default is the Identity ( implying the path
  71. /// should be specified in the reference bodies  Local space). 
  72. inline void setReferenceBodyPathTransform(const hkTransform& t);
  73. /// Set the friction magnitude.
  74. inline void setMaxFrictionForce(hkReal friction);
  75. /// Get the friction magnitude.
  76. inline hkReal getMaxFrictionForce();
  77. /// Check consistency of constraint members.
  78. virtual hkBool isValid() const;
  79. /// Set the path.
  80. void setPath(hkpParametricCurve* path);
  81. /// Get the path.
  82. inline hkpParametricCurve* getPath() const;
  83. /// Get the "Constraint" space for the i'th body.
  84. /// getConstraintToLocalTransform(0) returns the Transform of the attached body's 
  85. /// pivot, in the attached body's Local space.
  86. /// getConstraintToLocalTransform(1) returns the Transform of the reference body's
  87. /// path, in the reference body's Local space.
  88. inline const hkTransform& getConstraintToLocalTransform(int i) const;
  89. /// Get type from this constraint.
  90. virtual int getType() const;
  91. enum 
  92. {
  93. SOLVER_RESULT_FRICTION = 0, // the friction.
  94. SOLVER_RESULT_1 = 1, // constraint 0, depends on the type.
  95. SOLVER_RESULT_2 = 2, // constraint 0, depends on the type.
  96. SOLVER_RESULT_3 = 3, // constraint 0, depends on the type.
  97. SOLVER_RESULT_4 = 4, // constraint 0, depends on the type.
  98. SOLVER_RESULT_5 = 5, // constraint 0, depends on the type.
  99. SOLVER_RESULT_6 = 6, // constraint 0, depends on the type.
  100. SOLVER_RESULT_MAX = 7 // keep this in sync with the hkSolverResult array below
  101. };
  102. struct Runtime
  103. {
  104. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpPointToPathConstraintData::Runtime );
  105. class hkpSolverResults m_solverResults[7/*VC6 doesn't like the scoping for SOLVER_RESULT_MAX*/];
  106. /// Current parametric position. 
  107. hkReal m_parametricPosition;
  108. };
  109. static inline Runtime* HK_CALL getRuntime( hkpConstraintRuntime* runtime ) { return reinterpret_cast<Runtime*>(runtime); }
  110. // hkpConstraintData interface implementation
  111. virtual void getRuntimeInfo( hkBool wantRuntime, hkpConstraintData::RuntimeInfo& infoOut ) const;
  112. public:
  113. struct hkpBridgeAtoms m_atoms;
  114. protected:
  115. /// The parametric path followed by bodyA.
  116. hkpParametricCurve* m_path;
  117. public:
  118. /// Max linear friction impulse.
  119. hkReal m_maxFrictionForce;
  120. /// Angular constraining options.
  121. hkEnum<OrientationConstraintType, hkInt8> m_angularConstrainedDOF;
  122. /// The transforms from constraint space to object space
  123. hkTransform m_transform_OS_KS[2];
  124. public:
  125. //
  126. // Internal functions
  127. //
  128. void calcPivot( const hkTransform& transformBodyA, hkVector4& pivotOut ) const;
  129. virtual void buildJacobian( const hkpConstraintQueryIn &in, hkpConstraintQueryOut &out );
  130. virtual void getConstraintInfo( hkpConstraintData::ConstraintInfo& info ) const;
  131. public:
  132. hkpPointToPathConstraintData(hkFinishLoadedObjectFlag f) : hkpConstraintData(f), m_atoms(f) {}
  133. };
  134. #include <Physics/Dynamics/Constraint/Bilateral/PointToPath/hkpPointToPathConstraintData.inl>
  135. #endif // HK_DYNAMICS2_POINT_TO_PATH_CONSTRAINT_H
  136. /*
  137. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  138. * Confidential Information of Havok.  (C) Copyright 1999-2009
  139. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  140. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  141. * rights, and intellectual property rights in the Havok software remain in
  142. * Havok and/or its suppliers.
  143. * Use of this software for evaluation purposes is subject to and indicates
  144. * acceptance of the End User licence Agreement for this product. A copy of
  145. * the license is included with this software and is also available at www.havok.com/tryhavok.
  146. */