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

其他游戏

开发平台:

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_TRI_SAMPLED_HEIGHTFIELD_BVTREE_SHAPE
  9. #define HK_TRI_SAMPLED_HEIGHTFIELD_BVTREE_SHAPE
  10. #include <Physics/Collide/Shape/Compound/Tree/hkpBvTreeShape.h>
  11. extern const hkClass hkpTriSampledHeightFieldBvTreeShapeClass;
  12. class hkpTriSampledHeightFieldCollection;
  13. /// This shape must be used in conjunction with the hkpTriSampledHeightFieldCollection. Please see the documentation for
  14. /// the hkpTriSampledHeightFieldCollection for details on what the classes do.
  15. class hkpTriSampledHeightFieldBvTreeShape : public hkpBvTreeShape
  16. {
  17. public:
  18. HK_DECLARE_REFLECTION();
  19. /// The constructor takes a pointer to hkpTriSampledHeightFieldCollection.
  20. /// This class is designed to work together with the hkpTriSampledHeightFieldCollection.
  21. /// The value "doAabbRejection" can be used to turn off the aabb rejection test.
  22. /// The queryAabb() method (which will be used by agents/user queries using 
  23. /// the hkpBvTreeShape interface) uses its projection onto the heightfield grid
  24. /// space to determine what triangles to return.
  25. /// To ensure that the resulting triangles are at least close to the
  26. /// AABB in the direction of projection (that the AABB is not hovering completely
  27. /// above or below all points in that area of heightfield), this test checks that it
  28. /// at least overlaps the single AABB bounding all those triangles.
  29. /// By default it is true. Setting it to false disables the test,
  30. /// which may give a small speedup for flat heightfields.
  31. hkpTriSampledHeightFieldBvTreeShape( const hkpTriSampledHeightFieldCollection* c, hkBool doAabbRejection = true );
  32. hkpTriSampledHeightFieldBvTreeShape( hkFinishLoadedObjectFlag flag ) : hkpBvTreeShape(flag), m_childContainer(flag)
  33. {
  34. if( flag.m_finishing )
  35. {
  36. m_type = HK_SHAPE_BV_TREE;
  37. m_bvTreeType = BVTREE_TRISAMPLED_HEIGHTFIELD;
  38. }
  39. }
  40. /// Returns a struct of function pointers needed by the SPU
  41. static void HK_CALL registerSimulationFunctions( ShapeFuncs& sf );
  42. static void HK_CALL registerCollideQueryFunctions( ShapeFuncs& sf );
  43. //
  44. // hkpBvTreeShape interface
  45. //
  46. /// Returns the hkpShapeKey for all shapes in the hkpShapeCollection that intersect with the obb (defined by obbTransform and obbExtent).
  47. /// This implementation simply bounds the OBB by an AABB and uses the queryAabb() method. Thus it is not as
  48. /// accurate as it could be if using a more sophisticated algorithm, and can return triangles completely outside the OBB.
  49. virtual void queryObb( const hkTransform& obbTransform, const hkVector4& obbExtent, hkReal tolerance, hkArray< hkpShapeKey >& hits ) const;
  50. /// Returns the hkpShapeKey for all shapes in the hkpShapeCollection that intersect with the AABB.
  51. virtual void queryAabb( const hkAabb& aabb, hkArray<hkpShapeKey>& hits ) const;
  52. // hkpBvTreeShape interface implementation.
  53. HKP_SHAPE_VIRTUAL hkUint32 queryAabbImpl(HKP_SHAPE_VIRTUAL_THIS const hkAabb& aabb, hkpShapeKey* hits, int maxNumKeys ) HKP_SHAPE_VIRTUAL_CONST;
  54. //
  55. // hkpShape interface
  56. //
  57. // hkpShape interface implementation.
  58. HKP_SHAPE_VIRTUAL void getAabbImpl( HKP_SHAPE_VIRTUAL_THIS const hkTransform& localToWorld, hkReal tolerance, hkAabb& out ) HKP_SHAPE_VIRTUAL_CONST;
  59. // hkpShape interface implementation.
  60. HKP_SHAPE_VIRTUAL hkBool castRayImpl( HKP_SHAPE_VIRTUAL_THIS const hkpShapeRayCastInput& input, hkpShapeRayCastOutput& output) HKP_SHAPE_VIRTUAL_CONST;
  61. // hkpShape interface implementation.
  62. HKP_SHAPE_VIRTUAL void castRayWithCollectorImpl( HKP_SHAPE_VIRTUAL_THIS const hkpShapeRayCastInput& input, const hkpCdBody& cdBody, hkpRayHitCollector& collector ) HKP_SHAPE_VIRTUAL_CONST;
  63. // Retrieves the shape collection, DMAing from PPU if necessary
  64. inline const hkpTriSampledHeightFieldCollection* getShapeCollection() const;
  65. // hkpBvTreeShape interface implementation.
  66. inline const hkpShapeContainer* getContainer() const;
  67. // hkpShape interface implementation.
  68. virtual int calcSizeForSpu(const CalcSizeForSpuInput& input, int spuBufferSizeLeft) const;
  69. HK_FORCE_INLINE hkBool getWantAabbRejectionTest() const { return m_wantAabbRejectionTest; }
  70. HK_FORCE_INLINE void   setWantAabbRejectionTest(hkBool newVal) { m_wantAabbRejectionTest = newVal; }
  71. protected:
  72. hkBool static HK_CALL getExtentsForQueryAabb(hkAabb& aabb, const hkpTriSampledHeightFieldCollection* collection, hkUint32& minX, hkUint32& maxX, hkUint32& minZ, hkUint32& maxZ);
  73. class hkpSingleShapeContainer m_childContainer;
  74. mutable int m_childSize; //+nosave
  75. hkBool m_wantAabbRejectionTest;
  76. // Need to pad to a multiple of 16 on SPU
  77. hkUint8 m_padding[12];
  78. };
  79. #include <Physics/Collide/Shape/HeightField/TriSampledHeightField/hkpTriSampledHeightFieldBvTreeShape.inl>
  80. #endif // HK_TRI_SAMPLED_HEIGHTFIELD_BVTREE_SHAPE
  81. /*
  82. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  83. * Confidential Information of Havok.  (C) Copyright 1999-2009
  84. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  85. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  86. * rights, and intellectual property rights in the Havok software remain in
  87. * Havok and/or its suppliers.
  88. * Use of this software for evaluation purposes is subject to and indicates
  89. * acceptance of the End User licence Agreement for this product. A copy of
  90. * the license is included with this software and is also available at www.havok.com/tryhavok.
  91. */