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

其他游戏

开发平台:

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_CLOSEST_POINT_MANIFOLD_H
  9. #define HK_COLLIDE2_CLOSEST_POINT_MANIFOLD_H
  10. class hkpCdBody;
  11. struct hkpProcessCollisionOutput;
  12. class hkpContactMgr;
  13. class hkpClosestPointManifold
  14. {
  15. public:
  16. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_CDINFO, hkpClosestPointManifold );
  17. enum { HK_NUM_MAX_CONTACTS = 4 };
  18. class hkpAgentContactPoint
  19. {
  20. public:
  21. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpClosestPointManifold::hkpAgentContactPoint );
  22. //
  23. // members
  24. //
  25. hkVector4 m_pointA; // in object space A  .w is the pointA weight
  26. hkVector4 m_pointB; // in object space B  .wi is the contactPointId
  27. hkVector4 m_normal; // in world space     .w is the distance
  28. //
  29. // The next three functions are only to be called after the above hkVector4 have been set
  30. //
  31. float& getDistance(){ return m_normal(3); }
  32. float getDistance() const { return m_normal(3); }
  33. const hkVector4& getSeparatingNormal() const { return m_normal; }
  34. float & getPointAWeight(){ return m_pointA(3); }
  35. unsigned getContactPointId() const { return m_pointB.getInt24W(); }
  36. void setContactPointId( int id ){ m_pointB.setInt24W( id );  }
  37. };
  38. inline hkpClosestPointManifold( );
  39. /// Adds a point to the point array. Note: this class does not check for overflows, therefore the maximum number of points is 4
  40. static void HK_CALL addPoint(  const hkpCdBody& ca, const hkpCdBody& cb, const hkpProcessCollisionInput &input, hkpProcessCollisionOutput& output, const struct hkpExtendedGskOut& cpInfo, hkReal createContactRangeMax, hkpContactMgr* contactMgr, hkCollisionConstraintOwner& constraintOwner, hkpAgentContactPoint* pointArray, int& numPoints );
  41. static void HK_CALL getPoints( const hkpCdBody& ca, const hkpCdBody& cb, const hkpProcessCollisionInput &input, hkReal dist, hkpAgentContactPoint* pointArray, int& numPoints, hkpProcessCollisionOutput& contactPointsOut, hkpContactMgr* contactMgr, hkCollisionConstraintOwner& constraintOwner  );
  42. static void HK_CALL cleanup( hkpAgentContactPoint* pointArray, int& numPoints, hkpContactMgr* mgr, hkCollisionConstraintOwner& info );
  43. static int HK_CALL  findRedundant5thPoint( const hkVector4** points);
  44. public:
  45. int m_numPoints;
  46. hkpAgentContactPoint m_contactPoints[HK_NUM_MAX_CONTACTS];
  47. };
  48. hkpClosestPointManifold::hkpClosestPointManifold()
  49. {
  50. m_numPoints = 0;
  51. }
  52. #endif // HK_COLLIDE2_CLOSEST_POINT_MANIFOLD_H
  53. /*
  54. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  55. * Confidential Information of Havok.  (C) Copyright 1999-2009
  56. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  57. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  58. * rights, and intellectual property rights in the Havok software remain in
  59. * Havok and/or its suppliers.
  60. * Use of this software for evaluation purposes is subject to and indicates
  61. * acceptance of the End User licence Agreement for this product. A copy of
  62. * the license is included with this software and is also available at www.havok.com/tryhavok.
  63. */