hkpConvexVerticesShape.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:7k
源码类别:

其他游戏

开发平台:

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_CONVEX_VERTICES_SHAPE_H
  9. #define HK_COLLIDE2_CONVEX_VERTICES_SHAPE_H
  10. #include <Physics/Collide/Shape/Convex/hkpConvexShape.h>
  11. extern const hkClass hkpConvexVerticesShapeClass;
  12. struct hkStridedVertices;
  13. class hkpConvexVerticesConnectivity;
  14. /// You can use this shape class to create a convex geometric object by specifying a set of vertices.
  15. /// Specify the vertices in the shape's local space. You must also provide the planes of the convex hull, which
  16. /// can be computed using the hkGeometryUtility::createConvexGeometry function (see the SimpleShapesDemo for an example).
  17. class hkpConvexVerticesShape : public hkpConvexShape
  18. {
  19. public:
  20. HK_DECLARE_REFLECTION();
  21. HK_DECLARE_GET_SIZE_FOR_SPU(hkpConvexVerticesShape);
  22. // 4 vectors stored transposed in the "columns" not the rows
  23. struct FourVectors
  24. {
  25. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpConvexVerticesShape::FourVectors );
  26. HK_DECLARE_REFLECTION();
  27. hkVector4 m_x;
  28. hkVector4 m_y;
  29. hkVector4 m_z;
  30. };
  31. public:
  32. /// Construct the shape from the given vertices and matching plane equations.
  33. /// These are plane equations of the convex hull and can be generated
  34. /// using the hkGeometryUtility::createConvexGeometry method.
  35. /// This constructor makes an internal copy of the vertices.
  36. /// You should take care of not passing in unnecessary vertices, e.g. inner vertices or
  37. /// duplicated vertices. hkGeometryUtility::createConvexGeometry will also give
  38. /// you back a clean list of vertices to use. See our Havok demos
  39. hkpConvexVerticesShape(const hkStridedVertices& vertsIn, const hkArray<hkVector4>& planeEquations, hkReal radius = hkConvexShapeDefaultRadius);
  40. /// Create from precomputed data.
  41. /// Note that numVertices is the actual number of vertices, not the
  42. /// number of FourVectors structures.
  43. hkpConvexVerticesShape( FourVectors* rotatedVertices, int numVertices,
  44. hkVector4* planes, int numPlanes,
  45. const hkAabb& aabb, hkReal radius = hkConvexShapeDefaultRadius );
  46. hkpConvexVerticesShape( hkFinishLoadedObjectFlag flag ) : hkpConvexShape(flag), m_rotatedVertices(flag), m_planeEquations(flag) { m_type = HK_SHAPE_CONVEX_VERTICES; }
  47. /// Dtor
  48. ~hkpConvexVerticesShape();
  49. /// The hkpConvexVerticesShape stores the vertices in optimized form.
  50. /// This function will retrieve them into the vertices array.
  51. /// It copies the vertices so is able to be a const method.
  52. void getOriginalVertices( hkArray<hkVector4>& vertices ) const;
  53. /// Returns the plane equations passed into the constructor
  54. const hkArray<hkVector4>& getPlaneEquations() const;
  55. /// Overwrite plane equations passed into the constructor
  56. void setPlaneEquations( const hkArray<hkVector4>& planes );
  57. /// convenience function to convert this shape to a new space
  58. void transformVerticesAndPlaneEquations( const hkTransform& t );
  59. void scaleVerticesAndPlaneEquations( hkReal scale );
  60. //
  61. // hkpConvexShape implementation
  62. //
  63. // hkpConvexShape::getSupportingVertex() interface implementation.
  64. HKP_SHAPE_VIRTUAL void getSupportingVertexImpl( HKP_SHAPE_VIRTUAL_THIS hkVector4Parameter direction, hkpCdVertex& supportingVertexOut ) HKP_SHAPE_VIRTUAL_CONST;
  65. // hkpConvexShape interface implementation.
  66. HKP_SHAPE_VIRTUAL void convertVertexIdsToVerticesImpl( HKP_SHAPE_VIRTUAL_THIS const hkpVertexId* ids, int numIds, hkpCdVertex* verticesOut) HKP_SHAPE_VIRTUAL_CONST;
  67. // hkpConvexShape interface implementation.
  68. HKP_SHAPE_VIRTUAL void getCentreImpl( HKP_SHAPE_VIRTUAL_THIS hkVector4& centreOut ) HKP_SHAPE_VIRTUAL_CONST;
  69. //
  70. // hkpSphereRepShape implementation
  71. //
  72. // hkpSphereRepShape interface implementation.
  73. HKP_SHAPE_VIRTUAL int getNumCollisionSpheresImpl( HKP_SHAPE_VIRTUAL_THIS2 ) HKP_SHAPE_VIRTUAL_CONST;
  74. // hkpSphereRepShape interface implementation.
  75. HKP_SHAPE_VIRTUAL const hkSphere* getCollisionSpheresImpl( HKP_SHAPE_VIRTUAL_THIS hkSphere* sphereBuffer ) HKP_SHAPE_VIRTUAL_CONST;
  76. //
  77. // hkpShape implementation
  78. //
  79. // hkpShape interface implementation.
  80. HKP_SHAPE_VIRTUAL void getAabbImpl( HKP_SHAPE_VIRTUAL_THIS const hkTransform& localToWorld, hkReal tolerance, hkAabb& out ) HKP_SHAPE_VIRTUAL_CONST;
  81. // hkpShape interface implementation.
  82. HKP_SHAPE_VIRTUAL hkBool castRayImpl( HKP_SHAPE_VIRTUAL_THIS const hkpShapeRayCastInput& input, hkpShapeRayCastOutput& results) HKP_SHAPE_VIRTUAL_CONST;
  83. // hkpConvexShape interface implementation
  84. void getFirstVertex(hkVector4& v) const;
  85. // Get the connectivity. This is optional for this shape. Returns HK_NULL if connectivity is not present.
  86. inline const hkpConvexVerticesConnectivity* getConnectivity() const { return m_connectivity; }
  87. // Set the connectivity. Setting to HK_NULL will remove connectivity information.
  88.             // The connectivity information is a 'cache' of information - so can be used to modify a const shape
  89.         void setConnectivity(const hkpConvexVerticesConnectivity* connect);
  90. //
  91. // hkpShape implementation
  92. //
  93. /// Returns a struct of function pointers needed by the SPU
  94. static void HK_CALL registerSimulationFunctions( ShapeFuncs& sf );
  95. /// Returns a struct of function pointers needed by the SPU
  96. static void HK_CALL registerCollideQueryFunctions( ShapeFuncs& sf );
  97. /// Returns a struct of function pointers needed by the SPU
  98. static void HK_CALL registerRayCastFunctions( ShapeFuncs& sf );
  99. /// Returns a struct of function pointers needed by the SPU
  100. static void HK_CALL registerGetAabbFunction( ShapeFuncs& sf );
  101. void copyVertexData(const float* vertexIn, int byteStriding, int numVertices);
  102. protected:
  103. void sortPlanes(void);
  104. protected:
  105. hkVector4 m_aabbHalfExtents;
  106. hkVector4 m_aabbCenter;
  107. //hkInplaceArray<FourVectors, 3> m_rotatedVertices;
  108. hkArray<struct FourVectors> m_rotatedVertices;
  109. hkInt32 m_numVertices;
  110. hkArray<hkVector4> m_planeEquations;
  111. // Optional data that provides the vertex connectivity that defines this shape
  112. // set to HK_NULL if connectivity information is not present
  113. // (Ref counted)
  114.         mutable const hkpConvexVerticesConnectivity* m_connectivity;
  115. };
  116. #endif // HK_COLLIDE2_CONVEX_VERTICES_SHAPE_H
  117. /*
  118. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  119. * Confidential Information of Havok.  (C) Copyright 1999-2009
  120. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  121. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  122. * rights, and intellectual property rights in the Havok software remain in
  123. * Havok and/or its suppliers.
  124. * Use of this software for evaluation purposes is subject to and indicates
  125. * acceptance of the End User licence Agreement for this product. A copy of
  126. * the license is included with this software and is also available at www.havok.com/tryhavok.
  127. */