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

其他游戏

开发平台:

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_AABB_UTIL_H
  9. #define HK_COLLIDE2_AABB_UTIL_H
  10. #include <Common/Base/Types/Physics/MotionState/hkMotionState.h> // needed for .inl file
  11. class hkAabb;
  12. class hkTransform;
  13. class hkVector4;
  14. /// A utility class for creating AABBs that contain various geometric objects.
  15. class hkpAabbUtil
  16. {
  17. public:
  18. //
  19. // Non-continuous aabb calculations
  20. //
  21. /// Calculates an AABB from an array of vertices.
  22. static void HK_CALL calcAabb( const float* vertexArray, int numVertices, int striding, hkAabb& aabbOut );
  23. /// Calculates an AABB from an array of hkVector4.
  24. static void HK_CALL calcAabb( const hkVector4* vertexArray, int numVertices, hkAabb& aabbOut );
  25. /// Calculates an AABB from an OBB specified by a transform, a center, and an halfExtents vector and an extra radius
  26. static inline void HK_CALL calcAabb( const hkTransform& BvToWorld, const hkVector4& halfExtents, const hkVector4& center, float extraRadius, hkAabb& aabbOut);
  27. /// Calculates an AABB from an OBB specified by a transform, and an halfExtents vector.
  28. static inline void HK_CALL calcAabb( const hkTransform& BvToWorld, const hkVector4& halfExtents, float extraRadius, hkAabb& aabbOut);
  29. public:
  30. //
  31. // Continuous aabb calculations
  32. //
  33. struct OffsetAabbInput
  34. {
  35. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpAabbUtil::OffsetAabbInput );
  36. hkPadSpu<const hkMotionState*> m_motionState;
  37. // intermediate transforms
  38. hkTransform m_transforms[4];
  39. hkPadSpu<int> m_numTransforms;
  40. // start-end transforms
  41. hkTransform m_startTransform;
  42. hkTransform m_endTransformInv;
  43. };
  44. /// Sweep a discrete aabb and convert it into a 'continuous' swept aabb
  45. HK_FORCE_INLINE static void HK_CALL sweepAabb(const hkMotionState* motionstate, hkReal tolerance, const hkAabb& aabbIn, hkAabb& aabbOut);
  46. /// Calculate OffsetAabbInput
  47. static void HK_CALL initOffsetAabbInput(const hkMotionState* motionstate, OffsetAabbInput& input);
  48. /// Sweep a discrete aabb which has a huge offset from the mass center and convert it into a 'continuous' swept aabb
  49. static void HK_CALL sweepOffsetAabb(const OffsetAabbInput& input, const hkAabb& aabbIn, hkAabb& aabbOut);
  50. };
  51. #include <Physics/Collide/Util/hkpAabbUtil.inl>
  52. #endif // HK_COLLIDE2_AABB_UTIL_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. */