hkpTriangleUtil.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_TRIANGLEUTIL_H
  9. #define HK_COLLIDE2_TRIANGLEUTIL_H
  10. extern hkReal hkDefaultTriangleDegeneracyTolerance;
  11. /// Triangle utilities (ray intersection, normal calculation, point-in-triangle tests etc.) 
  12. class hkpTriangleUtil
  13. {
  14. public:
  15. // Utilities...
  16. /// Method to calculate the (non-normalized) triangle normal.
  17. /// Given the vertices, set normal to be the non-unit normal.
  18. /// param normal   
  19. /// param a   
  20. /// param b   
  21. /// param c   
  22. static inline void HK_CALL calcNormal( hkVector4& normal, const hkVector4& a, const hkVector4& b, const hkVector4& c );
  23. /// Method to calculate the triangle centroid.
  24. /// Given the vertices list, set the centroid to be the centroid of the three vertices.
  25. /// param centroid   
  26. /// param a   
  27. /// param b   
  28. /// param c 
  29. static inline void HK_CALL calcCentroid( hkVector4& centroid, const hkVector4& a, const hkVector4& b, const hkVector4& c );
  30. /// Returns true if the point is in front of the Triangle.
  31. /// Given the plane in which the triangle is embedded, the point is in front if (and only if) 
  32. /// the point is in the half space (defined by the plane) that the normal points into.
  33. /// param point   
  34. /// param a   
  35. /// param b   
  36. /// param c   
  37. static inline hkBool HK_CALL inFront( const hkVector4& point, const hkVector4& a, const hkVector4& b, const hkVector4& c );
  38. /// Return true if the point is contained within the Triangle.
  39. /// Assumes that the point is on the plane containing the Triangle.
  40. /// param pt   
  41. /// param a   
  42. /// param b   
  43. /// param c  
  44. static inline hkBool HK_CALL containsPoint( const hkVector4 &pt, const hkVector4& a, const hkVector4& b, const hkVector4& c );
  45. /// Returns the plane constant (d) for this Triangle
  46. static inline hkReal HK_CALL calcPlaneConstant( const hkVector4& a, const hkVector4& b, const hkVector4& c );
  47. /// Performs a ray-triangle intersection test.
  48. /// Returns true if the given ray r=pos+t*dir intersects the triangle  Returns t,
  49. /// and u,v (planar coordinates  on the triangle).
  50. /// If perform_culling=true, back-face culling is performed, i.e. if t gets negative, the
  51. /// method returns false.
  52. ///
  53. /// param t               (output) distance to triangle if hit.
  54. /// param u               (output) barycentric coordinate on triangle if hit.
  55. /// param v               (output) barycentric coordinate on triangle if hit.
  56. /// param pos             (input) origin of ray.
  57. /// param dir             (input) direction of ray.
  58. /// param a               First vertex.
  59. /// param b               Second vertex.
  60. /// param c               Third vertex.
  61. /// param perform_culling If true backface culling will be performed.
  62. static hkBool HK_CALL rayIntersect( hkReal &t, hkReal &u, hkReal &v, const hkVector4 &pos, const hkVector4 &dir,
  63.   const hkVector4& a, const hkVector4& b, const hkVector4& c, hkBool perform_culling=false );
  64. /// Returns true if the triangle is degenerate.
  65. /// Degenerate is assumed to be:
  66. ///  * it has very small area (cross product of edges all squared less than given tolerance).
  67. ///  * it has a aspect ratio which will cause collision detection algorithms to fail.
  68. /// param a               First vertex.
  69. /// param b               Second vertex.
  70. /// param c               Third vertex.
  71. /// param tolerance    Minimal acceptable area and squared edge length
  72. static hkBool HK_CALL isDegenerate(const hkVector4& a, const hkVector4& b, const hkVector4& c , hkReal tolerance = hkDefaultTriangleDegeneracyTolerance);
  73. protected:
  74. hkpTriangleUtil();
  75. };
  76. #include <Physics/Collide/Util/hkpTriangleUtil.inl>
  77. #endif // HK_COLLIDE2_TRIANGLEUTIL_H
  78. /*
  79. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  80. * Confidential Information of Havok.  (C) Copyright 1999-2009
  81. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  82. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  83. * rights, and intellectual property rights in the Havok software remain in
  84. * Havok and/or its suppliers.
  85. * Use of this software for evaluation purposes is subject to and indicates
  86. * acceptance of the End User licence Agreement for this product. A copy of
  87. * the license is included with this software and is also available at www.havok.com/tryhavok.
  88. */