hkpRigidBodyCinfo.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 HKDYNAMICS_ENTITY_HKRIGIDBODYCINFO_XML_H
  9. #define HKDYNAMICS_ENTITY_HKRIGIDBODYCINFO_XML_H
  10. #include <Physics/Collide/Agent/Collidable/hkpCollidableQualityType.h>
  11. #include <Physics/Dynamics/Motion/hkpMotion.h>
  12. #include <Physics/Dynamics/Entity/hkpRigidBodyDeactivator.h>
  13. #include <Physics/Dynamics/Entity/hkpEntity.h>
  14. class hkpHandleCollection;
  15. /// A struct containing all the information needed to construct a rigid body.
  16. class hkpRigidBodyCinfo
  17. {
  18. public:
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_ENTITY, hkpRigidBodyCinfo);
  20. /// A list of possible solver deactivation settings. This value defines how the
  21. /// solver deactivates objects. The solver works on a per object basis. 
  22. /// Note: Solver deactivation does not save CPU, but reduces creeping of
  23. /// movable objects in a pile quite dramatically.
  24. enum SolverDeactivation
  25. {
  26. /// 
  27. SOLVER_DEACTIVATION_INVALID,
  28. /// No solver deactivation
  29. SOLVER_DEACTIVATION_OFF,
  30. /// Very conservative deactivation, typically no visible artifacts.
  31. SOLVER_DEACTIVATION_LOW,
  32. /// Normal deactivation, no serious visible artifacts in most cases
  33. SOLVER_DEACTIVATION_MEDIUM,
  34. /// Fast deactivation, visible artifacts
  35. SOLVER_DEACTIVATION_HIGH,
  36. /// Very fast deactivation, visible artifacts
  37. SOLVER_DEACTIVATION_MAX
  38. };
  39. /// Default constructor - initializes all default values.
  40. hkpRigidBodyCinfo();
  41. void setMassProperties(const struct hkpMassProperties& mp);
  42. //
  43. // Members
  44. //
  45. public:
  46. /// This value can be used by collision filters to identify the entity - for
  47. /// example, if a group collision filter is used, this value would specify the
  48. /// entity's collision group.
  49. /// This defaults to 0.
  50. hkUint32 m_collisionFilterInfo;
  51. /// The collision detection representation for this entity.
  52. /// This defaults to HK_NULL, and must be set before constructing a hkpRigidBody.
  53. const hkpShape* m_shape;
  54. /// The local frame hierarchy that is attached to the rigid body.
  55. hkLocalFrame* m_localFrame;
  56. /// The collision response. See hkpMaterial::hkResponseType for hkpWorld default
  57. /// implementations.
  58. /// This defaults to hkpMaterial::RESPONSE_SIMPLE_CONTACT.
  59. hkEnum<hkpMaterial::ResponseType, hkInt8> m_collisionResponse;
  60. /// Lowers the frequency for processContactCallbacks. A value of 5 means that a
  61. /// callback is raised every 5th frame.
  62. /// This defaults to 0xffff.
  63. hkUint16 m_processContactCallbackDelay;
  64. /// The initial position of the body.
  65. /// This defaults to 0,0,0.
  66. hkVector4 m_position;
  67. /// The initial rotation of the body.
  68. /// This defaults to the Identity quaternion.
  69. hkQuaternion m_rotation;
  70. /// The initial linear velocity of the body.
  71. /// This defaults to 0,0,0.
  72. hkVector4 m_linearVelocity;
  73. /// The initial angular velocity of the body.
  74. /// This defaults to 0,0,0.
  75. hkVector4 m_angularVelocity;
  76. /// The inertia tensor of the rigid body. Use the hkpInertiaTensorComputer class to
  77. /// set the inertia to suitable values.
  78. /// This defaults to the identity matrix.
  79. hkMatrix3 m_inertiaTensor;
  80. /// The center of mass in the local space of the rigid body.
  81. /// This defaults to 0,0,0.
  82. hkVector4 m_centerOfMass;
  83. /// The mass of the body.
  84. /// This defaults to 1.
  85. hkReal m_mass;
  86. /// The initial linear damping of the body.
  87. /// This defaults to 0.
  88. hkReal m_linearDamping;
  89. /// The initial angular damping of the body.
  90. /// This defaults to 0.05.
  91. hkReal m_angularDamping;
  92. /// Gravity factor used to control gravity on a per body basis. Defaults to 1.0
  93. hkReal m_gravityFactor;
  94. /// The initial friction of the body.
  95. /// This defaults to 0.5.
  96. hkReal m_friction;
  97. /// The initial restitution of the body.
  98. /// This defaults to 0.4.
  99. /// If the restitution is not 0.0 the object will need extra CPU
  100. /// for all new collisions. Try to set restitution to 0 for maximum 
  101. /// performance (e.g. collapsing buildings)
  102. hkReal m_restitution;
  103. /// The maximum linear velocity of the body (in m/s).
  104. /// This defaults to 200. 
  105. hkReal m_maxLinearVelocity;
  106. /// The maximum angular velocity of the body (in rad/s).
  107. /// This defaults to 200. 
  108. hkReal m_maxAngularVelocity;
  109. /// The maximum allowed penetration for this object. The default is -1.
  110. /// This is a hint to the engine to see how much CPU the engine should
  111. /// invest to keep this object from penetrating. A good choice is 5% - 20% of the
  112. /// smallest diameter of the object.  Setting the initial value less than zero
  113. /// allows the penetration depth to be estimated by the RigidBody upon creation.
  114. /// This estimated value is 1/5th of the smallest dimension of the object's radius. 
  115. hkReal m_allowedPenetrationDepth;
  116. /// The initial motion type of the body.
  117. /// This defaults to hkpMotion::MOTION_DYNAMIC
  118. hkEnum<hkpMotion::MotionType, hkInt8> m_motionType;
  119. /// The initial deactivator type of the body.
  120. /// This defaults to hkpRigidBodyDeactivator::DEACTIVATOR_SPATIAL.
  121. hkEnum<hkpRigidBodyDeactivator::DeactivatorType, hkInt8> m_rigidBodyDeactivatorType;
  122. /// Allows you to enable an extra single object deactivation schema. 
  123. /// That means the engine will try to "deactivate" single objects (not just entire islands)
  124. /// if those objects get very slow.
  125. /// This does not save CPU, however it can reduce small movements in big stacks of objects dramatically. 
  126. /// This defaults to SOLVER_DEACTIVATION_LOW.
  127. hkEnum<SolverDeactivation, hkInt8> m_solverDeactivation;
  128. /// The quality type, used to specify when to use continuous physics
  129. /// This defaults to HK_COLLIDABLE_QUALITY_INVALID
  130.   /// If you add a hkpRigidBody to the hkpWorld, this type automatically gets converted to either
  131.     /// HK_COLLIDABLE_QUALITY_FIXED, HK_COLLIDABLE_QUALITY_KEYFRAMED or HK_COLLIDABLE_QUALITY_DEBRIS
  132. hkEnum<hkpCollidableQualityType, hkInt8> m_qualityType;
  133. /// This is a user flag which you can set to give you a hint as to which objects to remove from
  134. /// the simulation if the memory overhead becomes too high. It defaults to 0.
  135. hkInt8 m_autoRemoveLevel;
  136. /// Requests a number of extra fields in each hkpContactPointProperties for this rigid body.
  137. /// By default the first elements of those extra field will be filled with the shape hierarchy.
  138. hkInt8 m_numUserDatasInContactPointProperties;
  139. /// PLAYSTATION(R)3 only: If this flag is set, all collision agents attached to this body will run on the ppu only.
  140. /// If this flag is set it will set the FORCE_PPU_USER_REQUEST bit in hkpCollidable::m_forceCollideOntoPpu bitfield
  141. hkBool m_forceCollideOntoPpu;
  142. };
  143. #endif // HKDYNAMICS_ENTITY_HKRIGIDBODYCINFO_XML_H
  144. /*
  145. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  146. * Confidential Information of Havok.  (C) Copyright 1999-2009
  147. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  148. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  149. * rights, and intellectual property rights in the Havok software remain in
  150. * Havok and/or its suppliers.
  151. * Use of this software for evaluation purposes is subject to and indicates
  152. * acceptance of the End User licence Agreement for this product. A copy of
  153. * the license is included with this software and is also available at www.havok.com/tryhavok.
  154. */