hkpVehicleData.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 HKVEHICLE_HKVEHICLEDATA_XML_H
  9. #define HKVEHICLE_HKVEHICLEDATA_XML_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Physics/Vehicle/Suspension/hkpVehicleSuspension.h>
  12. #include <Physics/Vehicle/Friction/hkpVehicleFriction.h>
  13. /// Contains data about a vehicle that does not change after initialization.
  14. /// This means that a hkpVehicleData class can be shared between multiple
  15. /// vehicles.
  16. class hkpVehicleData : public hkReferencedObject
  17. {
  18. public:
  19. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_VEHICLE);
  20. HK_DECLARE_REFLECTION();
  21. /// Data about wheels that is shared between several components of the vehicle.
  22. struct WheelComponentParams
  23. {
  24. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_VEHICLE, hkpVehicleData::WheelComponentParams );
  25. HK_DECLARE_REFLECTION();
  26. /// The wheel radius (in meters).
  27. hkReal m_radius;
  28. /// The mass of the wheel.
  29. hkReal m_mass;
  30. /// The wheel width (in meters).
  31. hkReal m_width;
  32. /// The wheel friction coefficient. This will be multiplied by the friction value of
  33. /// the landscape to get the final value. Realistic values range from 0.5f to 1.0f.
  34. /// However, to get good gameplay, try values up to 4.0f.
  35. hkReal m_friction;
  36. /// An extra velocity dependent friction factor. This factor allows us to increase
  37. /// the friction if the car slides. NOTE: This is unrealistic for driving on roads
  38. /// but makes sense in some off road environments. It also allows the car to be
  39. /// tweaked for better handling. Values between 0.0f and 0.1f are reasonable.
  40. hkReal m_viscosityFriction;
  41. /// Clips the final friction. formula: resulting friction = max( wheelsFriction +
  42. /// slipVelocity * wheelsViscosityFriction, wheelsMaxFriction). Values between
  43. /// wheelsFriction and wheelsFriction* 2.0f are reasonable.
  44. hkReal m_maxFriction;
  45. /// The slip angle of the tyre for a car where the cornering forces are one g
  46. hkReal m_slipAngle;
  47. /// The calculated suspension force is scaled by this constant before it is applied
  48. /// to any dynamic body the vehicle is driving on. Usually this should be set to
  49. /// 1.0.  The acceleration the vehicle can inflict on a contact body due to this
  50. /// forceFeedback can be limited by setting the m_contactBodyAccelerationLimit
  51. /// parameter.
  52. hkReal m_forceFeedbackMultiplier;
  53. /// Limits the acceleration of any dynamic body the vehicle is driving over (due to the 
  54. /// scaled calculated suspension force) to this value.
  55. hkReal m_maxContactBodyAcceleration;
  56. /// The axle the wheel is on.
  57. hkInt8 m_axle;
  58. };
  59. /// Default constructor
  60. hkpVehicleData();
  61. /// The init function must be called after all the components of the vehicle have been initialized.
  62. virtual void init( const hkArray<struct hkpVehicleSuspension::SuspensionWheelParameters>& suspensionWheelParams, hkpRigidBody* chassis);
  63. //
  64. // Members
  65. //
  66. public:
  67. /// The gravity direction used by the vehicle simulation.
  68. hkVector4 m_gravity;
  69. /// The number of wheels in the vehicle.
  70. hkInt8 m_numWheels;
  71. /// The local coordinate system of the chassis. The first column is the 'up' direction of
  72. /// the vehicle, the second column is the 'forward' direction and the third column is perpendicular
  73. /// to both. Positive rotations about the third column correspond to the wheel motion when going
  74. /// forward. This direction affects gear shifting, braking and accelerating.
  75. hkRotation m_chassisOrientation;
  76. /// Scales the torques applied by the simulation at the roll axis by the given
  77. /// factor.
  78. hkReal m_torqueRollFactor;
  79. /// Scales the torques applied by the simulation at the pitch axis by the given
  80. /// factor.
  81. hkReal m_torquePitchFactor;
  82. /// Scales the torques applied by the simulation at the yaw axis by the given
  83. /// factor.
  84. hkReal m_torqueYawFactor;
  85. /// An extra torque which is applied to the car when steering is pointing left or
  86. /// right.
  87. hkReal m_extraTorqueFactor;
  88. /// To avoid sliding at slow speeds or when the handbrake is turned on, we
  89. /// introduced a positional friction model (since Havok 2.2.1)  into the vehicle
  90. /// friction solver.  This extra friction is particular useful for slow driving
  91. /// cars. To avoid letting this friction influence fast cars, you can set
  92. ///  maxVelocityForPositionalFriction to the maximum velocity, up to which you want
  93. /// this extra algorithm to be activated.  defines up to which speed the positional
  94. /// friction model will be used.
  95. hkReal m_maxVelocityForPositionalFriction;
  96. /// The rotation inertia in yaw direction for a car of the mass 1.0f kilo.
  97. hkReal m_chassisUnitInertiaYaw;
  98. /// The rotation inertia in roll direction for a car of the mass 1.0f kilo.
  99. hkReal m_chassisUnitInertiaRoll;
  100. /// The rotation inertia in pitch direction for a car of the mass 1.0f kilo.
  101. hkReal m_chassisUnitInertiaPitch;
  102. /// Specifies how the effect of dynamic load distribution is averaged with static
  103. /// load distribution.  A value of 0.0f doesn't do any averaging (dynamic load
  104. /// distribution is fully taken into account).  A value of 1.0f doesn't take
  105. /// dynamic load distribution, and the car behaves always as if it was in static
  106. /// load distribution.  Values between 0.0f and 1.0f give a certain amount of both.
  107. hkReal m_frictionEqualizer;
  108. /// Change this value to clip the normal in suspension force calculations.  In
  109. /// particular, when mounting a curb, the raycast vehicle calculations can produce
  110. /// large impulses as the rays hit the face of the step, causing the vehicle to
  111. /// spin around its up-axis. Setting this value to 0.2f produces considerably more
  112. /// stability. 
  113. hkReal m_normalClippingAngle;
  114. /// Limits the mass ratio between the chassis and any dynamic body the vehicle is driving over.
  115. /// This prevents small objects from shooting away from an accelerating vehicle.
  116. hkReal m_maxFrictionSolverMassRatio; //+default(30.0)
  117. /// Contains information that affects the behavior of each wheel.
  118. hkArray<struct WheelComponentParams> m_wheelParams;
  119. /// The number of wheels on each axle.
  120. hkArray<hkInt8> m_numWheelsPerAxle;
  121. /// For the friction: const data
  122. struct hkpVehicleFrictionDescription m_frictionDescription;
  123. /// The inertia used for friction calculation.
  124. hkVector4 m_chassisFrictionInertiaInvDiag;
  125. /// The vehicleData can be shared between multiple vehicles, so it should be 
  126. /// initialized only once.
  127. hkBool m_alreadyInitialised;
  128. public:
  129. hkpVehicleData( hkFinishLoadedObjectFlag f ) : hkReferencedObject(f), m_wheelParams(f), m_numWheelsPerAxle(f) { }
  130. };
  131. #endif // HKVEHICLE_HKVEHICLEDATA_XML_H
  132. /*
  133. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  134. * Confidential Information of Havok.  (C) Copyright 1999-2009
  135. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  136. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  137. * rights, and intellectual property rights in the Havok software remain in
  138. * Havok and/or its suppliers.
  139. * Use of this software for evaluation purposes is subject to and indicates
  140. * acceptance of the End User licence Agreement for this product. A copy of
  141. * the license is included with this software and is also available at www.havok.com/tryhavok.
  142. */