hkpConvexVerticesConnectivityUtil.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_CONVEX_VERTICES_CONNECTIVITY_UTIL_H
  9. #define HK_CONVEX_VERTICES_CONNECTIVITY_UTIL_H
  10. #include <Physics/Collide/Shape/Convex/hkpConvexShape.h>
  11. #include <Physics/Collide/Shape/Convex/ConvexVertices/hkpConvexVerticesConnectivity.h>
  12. #include <Common/Base/Types/Geometry/hkGeometry.h>
  13. #include <Common/Base/Types/Geometry/hkStridedVertices.h>
  14. class hkpConvexVerticesShape;
  15. /// This utility class is used to work out connectivity from a hkpConvexVerticesShape and store the results in
  16. /// a hkpConvexVerticesConnectivity
  17. /// Since it may not be possible to find valid connectivity the methods will return if they successfully found
  18. /// connectivity.
  19. /// The connectivity is used to find the inertia tensor and to cut the shape using a plane.
  20. class hkpConvexVerticesConnectivityUtil
  21. {
  22. public:
  23.             /// Will traverse the shape hierarchy and if any hkpConvexVerticesShape types are found it will set
  24.             /// connectivity
  25.         static hkResult HK_CALL ensureConnectivityAll(const hkpShape* shape);
  26.             /// Checks if there is connectivity information. If not it will create a shape with connectivity
  27.             /// May return the input shape reference counted
  28.         static hkResult HK_CALL ensureConnectivity(const hkpConvexVerticesShape* shape);
  29.             /// Find the connectivity from the convex shape
  30.             /// Finding the connectivity may be a fairly slow process - as will need to reconstruct the convex
  31.             /// hull.
  32.         static hkpConvexVerticesConnectivity* HK_CALL findConnectivity(const hkpConvexVerticesShape* shape);
  33.             /// Cuts the a shape with the a plane. The part of the shape that is on the positive side of the plane is kept.
  34.             /// Returns HK_NULL if nothing was produced or if the volume of the produced shape is below a minVolume.
  35.             /// May return shape reference counted (and with connectivity set) if the plane does not cut the shape.
  36.         static const hkpConvexVerticesShape* HK_CALL cut(const hkpConvexVerticesShape* shape, const hkVector4& plane, hkReal convexRadius, hkReal minVolume);
  37.             /// Creates geometry from a hkpConvexVerticesShape and connectivity information
  38.         static hkGeometry* HK_CALL createGeometry(const hkpConvexVerticesShape* shape,const hkpConvexVerticesConnectivity* conn);
  39. /// Creates geometry from a hkpConvexVerticesShape and connectivity information, and a transform for the vertices
  40. static hkGeometry* HK_CALL createGeometry(const hkpConvexVerticesShape* shape, const hkpConvexVerticesConnectivity* con, const hkTransform& transform);
  41.             /// Quickly calculates the volume of the shape - shape requires the connectivity information
  42.         static hkReal HK_CALL calculateVolume(const hkpConvexVerticesShape* shape,const hkpConvexVerticesConnectivity* conn);
  43.             /// Quickly calculates the volume specified in the connectivity with the specified vertices
  44.         static hkReal HK_CALL calculateVolume(const hkArray<hkVector4>& vertices,const hkpConvexVerticesConnectivity* conn);
  45. /// Calculates the convex hull of the points in stridedVertsIn and returns the vertices used, the plane equations generated, the geometry of hull and the connectivity.
  46. static void HK_CALL createConvexGeometry( const hkStridedVertices& stridedVertsIn, hkGeometry& geometryOut, hkArray<hkVector4>& planeEquationsOut, hkpConvexVerticesConnectivity** connectivityOut );
  47.     public:
  48.         struct Edge
  49.         {
  50.             hkInt32 m_start;        // If -1 means not set
  51.             hkInt32 m_end;
  52.         };
  53.             /// For each face we create a linked list of face edges
  54.             /// we then remove all of the edges which there is the opposite pair - this should leave
  55.             /// only the outside (presumably convex) edges that make up the face
  56.         struct FaceEdge
  57.         {
  58.             int m_startIndex;
  59.             int m_endIndex;
  60.             FaceEdge* m_next;
  61.         };
  62.         struct VertexInfo
  63.         {
  64.                 /// Index to the new vertex
  65.             hkUint32 m_newIndex;
  66.                 /// 1 if outside, 0 otherwise
  67.             hkUint32 m_outside;
  68.                 /// The distance from the plane
  69.             hkReal m_side;
  70.         };
  71.     private:
  72.             // disable
  73.         hkpConvexVerticesConnectivityUtil();
  74. };
  75. #endif // HK_CONVEX_VERTICES_CONNECTIVITY_UTIL_H
  76. /*
  77. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  78. * Confidential Information of Havok.  (C) Copyright 1999-2009
  79. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  80. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  81. * rights, and intellectual property rights in the Havok software remain in
  82. * Havok and/or its suppliers.
  83. * Use of this software for evaluation purposes is subject to and indicates
  84. * acceptance of the End User licence Agreement for this product. A copy of
  85. * the license is included with this software and is also available at www.havok.com/tryhavok.
  86. */