hkpMaterial.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 HK_DYNAMICS2_MATERIAL_H
  9. #define HK_DYNAMICS2_MATERIAL_H
  10. extern const hkClass hkpMaterialClass;
  11. /// hkMaterials allow you to add extra information to collision detection results, such as friction and restitution values.
  12. class hkpMaterial
  13. {
  14. public:
  15. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpMaterial );
  16. HK_DECLARE_REFLECTION();
  17. /// Constructor initializes friction to .5 and restitution to .4 and rollingFrictionMultiplier to .0.
  18. inline hkpMaterial();
  19. //
  20. // Friction and Restitution
  21. //
  22. /// Returns the friction coefficient (dynamic and static).
  23. inline hkReal getFriction() const;
  24. /// Returns the default restitution.
  25. //  restitution = bounciness (1 should give object all its energy back, 0 means it just sits there, etc.).
  26. inline hkReal getRestitution() const;
  27. /// Returns the rolling friction coefficient multiplier.
  28. inline hkReal getRollingFrictionMultiplier() const;
  29. /// Sets the friction coefficient. Note: Setting this will not update existing contact information.
  30. inline void setFriction( hkReal newFriction );
  31. /// Sets the restitution coefficient. Note: Setting this will not update existing contact information.
  32. inline void setRestitution( hkReal newRestitution );
  33. /// Sets the rolling friction coefficient multiplier. Note: Unlike setFriction, 
  34. /// this will have immediate effect on all existing contact information.
  35. inline void setRollingFrictionMultiplier( hkReal newRollingFrictionMultiplier );
  36. /// This returns the default way to combine two friction values.
  37. /// We take the geometric mean ( sqrt (frictionA * frictionB) )
  38. static inline hkReal HK_CALL getCombinedFriction( hkReal frictionA, hkReal frictionB);
  39. /// This returns the default way to combine two restitution values.
  40. /// We take the geometric mean ( sqrt (restitutionA * restitutionB) )
  41. static inline hkReal HK_CALL getCombinedRestitution( hkReal restitutionA, hkReal restitutionB);
  42. /// This returns the default way to combine two rolling friction multiplier values.
  43. /// We take the geometric mean ( sqrt (multiplierA * multiplierB) )
  44. static inline hkReal HK_CALL getCombinedRollingFrictionMultiplier( hkReal multiplierA, hkReal multiplierB );
  45. //
  46. // Response type
  47. //
  48. /// A list of some response types as initially set up by the hkpWorld constructor,
  49. /// which can be overridden. The default behavior is that a higher ResponseType
  50. /// overrides a lower ResponseType. For instance, RESPONSE_NONE will have a higher
  51. /// priority than RESPONSE_SIMPLE_CONTACT. 
  52. enum ResponseType
  53. {
  54. /// 
  55. RESPONSE_INVALID,
  56. /// Do normal collision resolution.
  57. RESPONSE_SIMPLE_CONTACT,
  58. /// Just do some reporting. No collision resolution is performed, but the collision
  59. /// listener functions are called.
  60. RESPONSE_REPORTING,
  61. /// Do nothing, ignore all the results.
  62. RESPONSE_NONE,
  63. /// 
  64. RESPONSE_MAX_ID
  65. };
  66. /// Get the response type. See the description of hkRepsonseType for details.
  67. inline void setResponseType( enum hkpMaterial::ResponseType t );
  68. /// Set the response type. See the description of hkRepsonseType for details.
  69. inline enum hkpMaterial::ResponseType getResponseType() const;
  70. private:
  71. hkEnum<ResponseType,hkInt8> m_responseType;
  72. hkReal m_friction;
  73. hkReal m_restitution;
  74. #if defined HK_ENABLE_ROLLING_FRICITON_CODE
  75. //hkReal m_rollingFrictionMultiplier; // Multiply this by m_friction to get the rolling friction coefficient
  76. #endif
  77. public:
  78. hkpMaterial( class hkFinishLoadedObjectFlag flag ) { }
  79. };
  80. #include <Physics/Dynamics/Common/hkpMaterial.inl>
  81. #endif // HK_DYNAMICS2_MATERIAL_H
  82. /*
  83. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  84. * Confidential Information of Havok.  (C) Copyright 1999-2009
  85. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  86. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  87. * rights, and intellectual property rights in the Havok software remain in
  88. * Havok and/or its suppliers.
  89. * Use of this software for evaluation purposes is subject to and indicates
  90. * acceptance of the End User licence Agreement for this product. A copy of
  91. * the license is included with this software and is also available at www.havok.com/tryhavok.
  92. */