hkpSimpleMeshShape.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_SIMPLE_MESH_SHAPE_H
  9. #define HK_SIMPLE_MESH_SHAPE_H
  10. #include <Physics/Collide/Shape/Compound/Collection/hkpShapeCollection.h>
  11. #include <Physics/Collide/Shape/Convex/Triangle/hkpTriangleShape.h>
  12. extern const hkClass hkpSimpleMeshShapeClass;
  13. class hkpMoppBvTreeShape;
  14. /// This shape is a very simple container for triangle soups and can't handle triangle strips.
  15. /// It does not allow sharing of triangle data with the renderer through referencing.
  16. /// Use hkpExtendedMeshShape or your own implementation of a hkpShapeCollection to share triangle data with the renderer.
  17. class hkpSimpleMeshShape : public hkpShapeCollection
  18. {
  19. public:
  20. HK_DECLARE_REFLECTION();
  21. /// Default constructor.
  22. /// The data for this shape is public, so simply fill in the
  23. /// member data after construction.
  24. hkpSimpleMeshShape( hkReal radius = hkConvexShapeDefaultRadius );
  25. /// Compute welding info. In order to weld collisions between triangles in this mesh, welding info must be created.
  26. /// You must call this after all subparts have been added to the mesh.
  27. /// The hkpMoppBvTreeShape you pass in must be built referencing this hkpMeshShape.
  28. /// This adds an additional 2 bytes per triangle storage overhead.
  29. /// This is an expensive call, and should be done off line, and the resultant hkpMeshShape
  30. /// serialized, to save the runtime overhead of computing the welding info.
  31. void computeWeldingInfo( const hkpMoppBvTreeShape* mopp, hkpWeldingUtility::WeldingType weldingType );
  32. //
  33. // hkpShapeCollection interface
  34. //
  35. /// Get the first child shape key.
  36. virtual hkpShapeKey getFirstKey() const;
  37. /// Get the next child shape key.
  38. virtual hkpShapeKey getNextKey( hkpShapeKey oldKey ) const;
  39. // hkpShapeCollection interface implementation.
  40. const hkpShape* getChildShape( hkpShapeKey key, ShapeBuffer& buffer ) const;
  41. /// Gets the extra radius for every triangle.
  42. inline hkReal getRadius() const;
  43. /// Sets the extra radius for every triangle.
  44. inline void setRadius(hkReal r );
  45. //
  46. // hkpShape interface
  47. //
  48. // hkpShape interface implementation.
  49.   virtual void getAabbImpl( const hkTransform& localToWorld, hkReal tolerance, hkAabb& out ) const;
  50.         virtual void calcContentStatistics( hkStatisticsCollector* collector, const hkClass* cls) const;
  51. public:
  52. struct Triangle
  53. {
  54. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpSimpleMeshShape::Triangle );
  55. HK_DECLARE_REFLECTION();
  56. int m_a;
  57. int m_b;
  58. int m_c;
  59. hkUint16 m_weldingInfo; // +default(0)
  60. };
  61. /// Array of vertices that the triangles can index into.
  62. hkArray<hkVector4> m_vertices;
  63. /// Array of triangles.  The triangles are triples of ints that are indices into the m_vertices array.
  64. hkArray<struct Triangle> m_triangles;
  65. /// Material indices. If you are not using material information, leave this array as 0 size.
  66. hkArray<hkUint8> m_materialIndices;
  67. /// The radius of the storage mesh shape. It is initialized to .05
  68. hkReal m_radius;
  69. /// A a welding type per triangle
  70. hkEnum<hkpWeldingUtility::WeldingType, hkUint8> m_weldingType; // +default(hkpWeldingUtility::WELDING_TYPE_NONE)
  71. public:
  72. hkpSimpleMeshShape( hkFinishLoadedObjectFlag flag ) : hkpShapeCollection(flag), m_vertices(flag), m_triangles(flag), m_materialIndices(flag)
  73. {
  74. if( flag.m_finishing )
  75. {
  76. m_type = HK_SHAPE_TRIANGLE_COLLECTION;
  77. }
  78. }
  79. };
  80. #include <Physics/Collide/Shape/Compound/Collection/SimpleMesh/hkpSimpleMeshShape.inl>
  81. #endif //HK_SIMPLE_MESH_SHAPE_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. */