hkpConvexPieceMeshShape.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_COLLIDE2_CONVEXPIECE_MESH_SHAPE_H
  9. #define HK_COLLIDE2_CONVEXPIECE_MESH_SHAPE_H
  10. #include <Physics/Internal/Collide/ConvexPieceMesh/hkpConvexPieceStreamData.h>
  11. #include <Common/Base/Container/Array/hkObjectArray.h>
  12. #include <Physics/Collide/Shape/Compound/Collection/hkpShapeCollection.h>
  13. #include <Common/Base/Reflection/hkTypeInfo.h>
  14. extern hkReal hkConvexShapeDefaultRadius;
  15. extern const hkClass hkpConvexPieceMeshShapeClass;
  16. /// DEPRECATED. This shape will be removed in future releases of Havok Physics.
  17. class hkpConvexPieceMeshShape: public hkpShapeCollection
  18. {
  19. public:
  20. HK_DECLARE_REFLECTION();
  21. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_CDINFO);
  22. /// Constructs a new hkpConvexPieceMeshShape.
  23. ///
  24. /// The inputMesh should be any hkpShapeCollection that returns hkpTriangleShape children.
  25. ///
  26. /// The convexPieceStream must be created by the hkpConvexPieceMeshBuilder::convexifyLandscape method.
  27. hkpConvexPieceMeshShape( const hkpShapeCollection* inputMesh, const hkpConvexPieceStreamData* convexPieceStream, hkReal radius = hkConvexShapeDefaultRadius );
  28. ~hkpConvexPieceMeshShape();
  29. //
  30. // hkpShape Collection interface
  31. //
  32. /// hkpShapeCollection interface implementation.
  33. /// Gets the first child shape key.
  34. virtual hkpShapeKey getFirstKey() const;
  35. /// This function implements hkpShapeCollection::getNextKey
  36. /// Gets the next child shape key.
  37. virtual hkpShapeKey getNextKey( hkpShapeKey oldKey ) const;
  38. /// hkpShapeCollection interface implementation.
  39. const hkpShape* getChildShape( hkpShapeKey key, ShapeBuffer& buffer ) const;
  40. /// Tests if the vertex given by vertexId is set in the vertex bitstream
  41. /// of stream.
  42. const hkBool vertexIsSet( const hkUint32* stream, int vertexId ) const;
  43. /// hkpShapeCollection interface implementation
  44. virtual hkUint32 getCollisionFilterInfo( hkpShapeKey key ) const;
  45. //
  46. // hkpShape interface
  47. //
  48. /// Used to pre-calculate the aabb for this shape.
  49. void calcAabb();
  50. /// hkpShape interface implementation.
  51. /// A precise but not very fast implementation of getting an AABB.
  52.   void getAabbImpl( const hkTransform& localToWorld, hkReal tolerance, class hkAabb& out  ) const;
  53. /// Calculates memory statistics
  54.         virtual void calcContentStatistics( hkStatisticsCollector* collector, const hkClass* cls) const;
  55. //
  56. // Statistics retrieval interface
  57. //
  58. /// Contains statistical information about the structure of the convex piece mesh.
  59. struct Stats
  60. {
  61. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpConvexPieceMeshShape::Stats );
  62. /// The total number of triangles in the mesh.
  63. int m_numTriangles;
  64. /// The total number of convex pieces in the mesh.
  65. int m_numConvexPieces;
  66. /// The average number of triangles per convex piece.
  67. /// This should be used as the metric to determine how
  68. /// effective the builder algorithm is - the higher this value
  69. /// is the better.
  70. hkReal m_avgNumTriangles;
  71. /// The maximum number of triangles in any single convex piece.
  72. int m_maxTrianglesPerConvexPiece;
  73. Stats() : m_numTriangles(0), m_numConvexPieces(0), m_avgNumTriangles(0), m_maxTrianglesPerConvexPiece(0) {}
  74. };
  75. /// Fills statsOut to contains info about this mesh shape.
  76. void getStats( Stats& statsOut );
  77. public:
  78. /// The mesh, divided into convex pieces which are then stored in a
  79. /// bit stream.
  80. const hkpConvexPieceStreamData* m_convexPieceStream;
  81. /// The underlying meshShape
  82. const hkpShapeCollection* m_displayMesh;
  83. hkpConvexPieceMeshShape( hkFinishLoadedObjectFlag flag ) : hkpShapeCollection( flag )
  84. {
  85. if( flag.m_finishing )
  86. {
  87. m_type = HK_SHAPE_COLLECTION;
  88. }
  89. }
  90. protected:
  91. /// The radius used in the construction of the convex pieces.
  92. /// This can only be set on construction.
  93. hkReal m_radius;
  94. };
  95. #endif // HK_COLLIDE2_CONVEXPIECE_MESH_SHAPE_H
  96. /*
  97. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  98. * Confidential Information of Havok.  (C) Copyright 1999-2009
  99. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  100. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  101. * rights, and intellectual property rights in the Havok software remain in
  102. * Havok and/or its suppliers.
  103. * Use of this software for evaluation purposes is subject to and indicates
  104. * acceptance of the End User licence Agreement for this product. A copy of
  105. * the license is included with this software and is also available at www.havok.com/tryhavok.
  106. */