hkpMultiRayShape.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_MULTI_RAY_SHAPE_H
  9. #define HK_COLLIDE2_MULTI_RAY_SHAPE_H
  10. #include <Physics/Collide/Shape/Convex/hkpConvexShape.h>
  11. extern const hkClass hkpMultiRayShapeClass;
  12. /// A shape that allows you to cast multiple rays.
  13. /// If you use this shape as a normal shape as part of a hkpRigidBody, this
  14. /// shape will generate it's contact points using a rayCast.
  15. /// As a result, the rays are treated like solid objects.
  16. class hkpMultiRayShape : public hkpShape
  17. {
  18. public:
  19. HK_DECLARE_REFLECTION();
  20. ///A ray from m_start to m_end.
  21. struct Ray
  22. {
  23. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkpMultiRayShape::Ray );
  24. HK_DECLARE_REFLECTION();
  25. hkVector4 m_start;
  26. hkVector4 m_end;
  27. };
  28. public:
  29. /// Creates a new hkpMultiRayShape with the specified rays and a rayPenetrationDistance (See hkMultiRayShapeCinfo for more details).
  30. hkpMultiRayShape( const Ray* rays, int nRays, hkReal rayPenetrationDistance = 0.0f );
  31. /// Returns the shape's rays extended by the shapes tolerance.
  32. inline const hkArray<Ray>& getRays() const{ return m_rays; }
  33. /// Returns the shape's ray penetration distance i.e. the distance each ray will be extended by and the distance that the physics system will allow each ray penetrate objects by. This helps to reduce jitter.
  34. inline hkReal getRayPenetrationDistance() const{ return m_rayPenetrationDistance; }
  35. // hkpShape implementation.
  36.   virtual void getAabbImpl( const hkTransform& localToWorld, hkReal tolerance, hkAabb& out  ) const;
  37. /// Finds the closest intersection between the shape and a ray defined in the shape's local space, starting at fromLocal, ending at toLocal.
  38. virtual hkBool castRayImpl( const hkpShapeRayCastInput& input, hkpShapeRayCastOutput& results ) const;
  39. /// a callback driven raycast
  40. virtual void castRayWithCollectorImpl( const hkpShapeRayCastInput& input, const hkpCdBody& cdBody, hkpRayHitCollector& collector ) const;
  41. virtual void calcContentStatistics( hkStatisticsCollector* collector, const hkClass* cls) const;
  42. protected:
  43. // The rays defined in local space
  44. hkArray<struct Ray> m_rays;
  45.                         // The ray penetration distance
  46. hkReal m_rayPenetrationDistance;
  47. public:
  48. hkpMultiRayShape( hkFinishLoadedObjectFlag flag ) : hkpShape(flag), m_rays(flag) { m_type = HK_SHAPE_MULTI_RAY; }
  49. };
  50. #endif // HK_COLLIDE2_LINE_SEGMENT_SHAPE_H
  51. /*
  52. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  53. * Confidential Information of Havok.  (C) Copyright 1999-2009
  54. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  55. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  56. * rights, and intellectual property rights in the Havok software remain in
  57. * Havok and/or its suppliers.
  58. * Use of this software for evaluation purposes is subject to and indicates
  59. * acceptance of the End User licence Agreement for this product. A copy of
  60. * the license is included with this software and is also available at www.havok.com/tryhavok.
  61. */