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

其他游戏

开发平台:

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 HK2VEHICLEFRICTIONSOLVER
  9. #define HK2VEHICLEFRICTIONSOLVER
  10. #include <Common/Base/hkBase.h>
  11. #include <Physics/Vehicle/Friction/hkpVehicleFriction.h>
  12. #include <Physics/ConstraintSolver/Accumulator/hkpVelocityAccumulator.h>
  13. /// The class hkVehicleFrictionSolver is used is an input and output to the vehicle dynamics.
  14. /// It holds all values which change every frame.
  15. /// See hkRaycastVehicle for more details.
  16. struct hkpVehicleFrictionSolverAxleParams
  17. {
  18. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ACTION, hkpVehicleFrictionSolverAxleParams);
  19. //
  20. // Geometry of the car
  21. //
  22. hkVector4 m_contactPointWs;
  23. hkVector4 m_constraintNormalWs;
  24. hkVector4 m_forwardDirWs;
  25. //
  26. // Ground Object
  27. //
  28. class hkpVelocityAccumulator* m_groundObject;
  29. class hkpVelocityAccumulator* m_groundObjectAtLastIntegration;
  30. //
  31. // Friction Info: 
  32. //  formula:   finalFriction = min( m_maxFrictionCoefficient, m_frictionCoefficient + slipVelocity * m_viscosityFrictionCoefficient );
  33. //             maxForce = finalFriction * m_wheelDownForce
  34. //
  35. hkReal m_frictionCoefficient;
  36. hkReal m_viscosityFrictionCoefficient;
  37. hkReal  m_maxFrictionCoefficient;
  38. hkReal m_wheelDownForce;
  39. hkReal m_forwardForce;
  40. /// This parameter defines how fast the vehicle tyres will slip (not slide)
  41. /// if the sideforce = downforce (that means the vehicle is standing on a 45 degree slope).
  42. /// The purpose of this parameter is to control the slip angle of the wheel:
  43. /// Assume you want to have a slip angle of 0.1 radians for a car cornering with 0.6g while driving 
  44. /// at 20 meters/second. In this case you set m_slipVelocityFactor to (sin(0.1f) * 20.0f)/0.6g
  45. /// This parameter only works if the velocity of the car is bigger than params.m_maxVelocityForPositionalFriction
  46. hkReal  m_slipVelocityFactor;
  47. //
  48. // Handbrake Info
  49. //
  50. hkUint8 m_wheelFixed;
  51. /// Initialises all data members to default values.
  52. inline void initialize();
  53. };
  54. /// The class hkpVehicleFrictionSolverParams is used by vehicle dynamics.
  55. /// See hkRaycastVehicle for more details.
  56. struct hkpVehicleFrictionSolverParams
  57. {
  58. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ACTION, hkpVehicleFrictionSolverParams);
  59. //
  60. // dynamic section
  61. //
  62. hkpVehicleFrictionSolverAxleParams m_axleParams[2];/*HK_VEHICLE_FRICTION_N_AXIS*/
  63. hkReal m_maxVelocityForPositionalFriction;
  64. class hkpVelocityAccumulator m_chassis;
  65. class hkpVelocityAccumulator m_chassisAtLastIntegration;
  66. };
  67. inline void hkpVehicleFrictionSolverAxleParams::initialize()
  68. {
  69. m_contactPointWs.setZero4();
  70. m_constraintNormalWs.setZero4();
  71. m_forwardDirWs.setZero4();
  72. m_frictionCoefficient = 0.0f;
  73. m_viscosityFrictionCoefficient = 0.0f;
  74. m_maxFrictionCoefficient = 0.0f;
  75. m_wheelDownForce = 0.0f;
  76. m_forwardForce = 0.0f;
  77. m_wheelFixed = false;
  78. m_groundObject = HK_NULL;
  79. m_groundObjectAtLastIntegration = HK_NULL;
  80. m_slipVelocityFactor = 0.0f;
  81. }
  82. extern "C"
  83. {
  84. /// Setup internal cache information hkpVehicleFrictionDescription for fast solving of the vehicle.
  85. void hkVehicleFrictionDescriptionInitValues( const hkpVehicleFrictionDescription::Cinfo& ci, hkpVehicleFrictionDescription& out);
  86. /// Solve the vehicle friction.
  87. void hkVehicleFrictionApplyVehicleFriction( const hkpVehicleStepInfo& stepInfo,
  88. const hkpVehicleFrictionDescription& descr,
  89. hkpVehicleFrictionSolverParams &params,
  90. hkpVehicleFrictionStatus &status);
  91. }
  92. #endif //HK2VEHICLEFRICTIONSOLVER
  93. /*
  94. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  95. * Confidential Information of Havok.  (C) Copyright 1999-2009
  96. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  97. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  98. * rights, and intellectual property rights in the Havok software remain in
  99. * Havok and/or its suppliers.
  100. * Use of this software for evaluation purposes is subject to and indicates
  101. * acceptance of the End User licence Agreement for this product. A copy of
  102. * the license is included with this software and is also available at www.havok.com/tryhavok.
  103. */