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

其他游戏

开发平台:

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_VISUALIZE_DEBUG_DISPLAY_H
  9. #define HK_VISUALIZE_DEBUG_DISPLAY_H
  10. #include <Common/Base/Types/Color/hkColor.h>
  11. #include <Common/Visualize/hkDebugDisplayHandler.h>
  12. class hkDisplayGeometry;
  13. /// A helper class, which enable the display of debug points and lines
  14. /// To use this class call the HK_DISPLAY_POINT(position, color) and 
  15. /// HK_DISPLAY_LINE(start, end, color) macros.  A HK_SET_OBJECT_COLOR(id, color)
  16. /// macro is also defined for convenience, where id is the address of the rigid 
  17. /// body.
  18. /// This is a thread safe singleton
  19. class hkDebugDisplay : public hkReferencedObject, public hkSingleton<hkDebugDisplay>
  20. {
  21. //+vtable(true)
  22. friend class hkSingleton<hkDebugDisplay>;
  23. public:
  24. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_VDB);
  25. hkDebugDisplay();
  26. ~hkDebugDisplay();
  27. /// Add a display viewer to the debug display.  All
  28. /// debug points and lines will be send to this display
  29. /// handler until it is removed.
  30. void addDebugDisplayHandler(hkDebugDisplayHandler* debugDisplay);
  31. /// Remove a display viewer from the debug display.
  32. /// No more debug points and lines will be sent to the
  33. /// display handler.
  34. void removeDebugDisplayHandler(hkDebugDisplayHandler* debugDisplay);
  35. /// Removes all display viewer from the debug display.
  36. /// No debug points and lines will be displayed after
  37. /// this function is called.
  38. void clear();
  39. public:
  40. /// Adds a geometry to the display world managed by this display handler.  The current convention
  41. /// for supplying an id is to take the address of the hkpCollidable from which the geometries were
  42. /// created.  
  43. /// Please refer to the hkDisplayHandler class description for the meaning of id and tag.
  44. void addGeometry(const hkArray<hkDisplayGeometry*>& geometries, const hkTransform& transform, hkUlong id, int tag, hkUlong shapeIdHint);
  45. /// Adds an instanced of a geometry that has already been added to the display world managed by this display handler.
  46. /// Please refer to the class description for the meaning of id and tag.
  47. void addGeometryInstance(hkUlong origianalGeomId, const hkTransform& transform, hkUlong id, int tag, hkUlong shapeIdHint);
  48. /// Sets the color of an object that has already been added to all display viewer (targeted by the debug display)
  49. /// Please refer to the hkDisplayHandler class description for the meaning of id and tag.
  50. void setGeometryColor(int color, hkUlong id, int tag);
  51. /// Updates the transform of a body in the display world.
  52. /// Please refer to the hkDisplayHandler class description for the meaning of id and tag.
  53. void updateGeometry(const hkTransform& transform, hkUlong id, int tag);
  54. /// Removes a geometry from the display world managed by this display handler.
  55. /// Please refer to the hkDisplayHandler class description for the meaning of id and tag.
  56. void removeGeometry(hkUlong id, int tag, hkUlong shapeIdHint);
  57. /// updated the user camera, the user can supply as many cameras as they like and these are identified by
  58. /// supplying a unique id for each camera.  (NOTE: currently only one user camera is supported and the id is
  59. /// ignored.)
  60. void updateCamera(const hkVector4& from, const hkVector4& to, const hkVector4& up, hkReal nearPlane, hkReal farPlane, hkReal fov, const char* name);
  61. /// Behavior updates
  62. void updateBehavior(hkArray<int>& wordVarIdx, hkArray<int>& wordStack, hkArray<int>& quadVarIdx, hkArray<hkVector4>& quadStack,
  63. hkArray<char*>& activeNodes, hkArray<int>& activeStateIds, hkArray<int>& activeTransitions, hkArray<hkQsTransform>& transforms);
  64. /// Displays a debug point. Please use the HK_DISPLAY_POINT macro instead of calling this function directly.
  65. void displayPoint(const hkVector4& position, int color, int tag);
  66. /// Display a debug line. Please use the HK_DISPLAY_LINE macro instead of calling this function directly.
  67. void displayLine(const hkVector4& start, const hkVector4& end, int color, int tag);
  68. /// Display a debug line. Please use the HK_DISPLAY_LINE macro instead of calling this function directly.
  69. void displayTriangle(const hkVector4& a, const hkVector4& b, const hkVector4& c, int color, int tag);
  70. /// Display a debug line using model coordinate endpoints.  
  71. /// Please use the HK_DISPLAY_LINE_MODEL macro instead of calling this function directly.
  72. void displayLineModelSpace(const hkQsTransform& worldFromModel, const hkVector4& start, const hkVector4& end, int color, int tag);
  73. /// Display a debug line using model coordinate endpoints.  
  74. /// Please use the HK_DISPLAY_LINE_MODEL macro instead of calling this function directly.
  75. void displayLineModelSpace(const hkTransform& worldFromModel, const hkVector4& start, const hkVector4& end, int color, int tag);
  76. /// Display a debug line specified as a start and direction (not necessarily normalized).
  77. /// Please use the HK_DISPLAY_RAY macro instead of calling this function directly.
  78. void displayRay(const hkVector4& start, const hkVector4& direction, int color, int tag);
  79. /// Display a debug ray in model coordinates.
  80. /// Please use the HK_DISPLAY_RAY_MODEL macro instead of calling this function directly.
  81. void displayRayModelSpace(const hkQsTransform& worldFromModel, const hkVector4& start, const hkVector4& direction, int color, int tag);
  82. /// Display a debug ray in model coordinates.
  83. /// Please use the HK_DISPLAY_RAY_MODEL macro instead of calling this function directly.
  84. void displayRayModelSpace(const hkTransform& worldFromModel, const hkVector4& start, const hkVector4& direction, int color, int tag);
  85. /// Display a debug arrow. Please use the HK_DISPLAY_ARROW macro
  86. /// instead of calling this function directly.
  87. void displayArrow(const hkVector4& start, const hkVector4& dir, int color, int tag);
  88. /// Display a debug star. Please use the HK_DISPLAY_STAR macro
  89. /// instead of calling this function directly.
  90. void displayStar(const hkVector4& position, hkReal scale, int color, int tag);
  91. /// Display a debug star in model coordinates.
  92. /// Please use the HK_DISPLAY_STAR_MODEL macro instead of calling this function directly.
  93. void displayStarModelSpace(const hkQsTransform& worldFromModel, const hkVector4& position, hkReal scale, int color, int tag);
  94. /// Display a debug star in model coordinates.
  95. /// Please use the HK_DISPLAY_STAR_MODEL macro instead of calling this function directly.
  96. void displayStarModelSpace(const hkTransform& worldFromModel, const hkVector4& position, hkReal scale, int color, int tag);
  97. /// Display a debug plane. Please use the HK_DISPLAY_PLANE macro
  98. /// instead of calling this function directly.
  99. void displayPlane(const hkVector4& plane, const hkVector4& offset, hkReal scale, int color, int tag);
  100. /// Outputs user text to the display.  (The manner in which the text is displayed depends on the 
  101. /// implementation of the display handler.)
  102. void displayText(const char* text, int color, int tag);
  103. /// Outputs user text to the display at the coordinates in world space
  104. void display3dText(const char* text, const hkVector4& pos, int color, int tag);
  105. /// Display a debug frame of reference, with the axes colored X=red, Y=green, Z=blue
  106. /// Please use the HK_DISPLAY_FRAME macro instead of calling this function directly.
  107. void displayFrame( const hkQsTransform& worldFromLocal, hkReal size, int tag );
  108. /// Display a debug frame of reference, with the axes colored X=red, Y=green, Z=blue
  109. /// Please use the HK_DISPLAY_FRAME macro instead of calling this function directly.
  110. void displayFrame( const hkTransform& worldFromLocal, hkReal size, int tag );
  111. /// Displays the geometries for one frame in immediate mode.
  112. void displayGeometry(const hkArray<hkDisplayGeometry*>& geometries, const hkTransform& transform, int color, int tag);
  113. /// Displays the geometries without transform for one frame in immediate mode.
  114. void displayGeometry(const hkArray<hkDisplayGeometry*>& geometries, int color, int tag);
  115. /// Display a wireframe AABB.
  116. /// Please use the HK_DISPLAY_BOUNDING_BOX macro instead of calling this function directly.
  117. void displayAabb(const class hkAabb& aabb, int color, int tag);
  118. protected:
  119. hkArray<hkDebugDisplayHandler*> m_debugDisplayHandlers;
  120. mutable class hkCriticalSection* m_arrayLock;
  121. };
  122. // Macros for displaying debug points and lines.
  123. // These can be compiled out if HK_DISABLE_DEBUG_DISPLAY is defined.
  124. #if defined(HK_DISABLE_DEBUG_DISPLAY)
  125. // No display of points and lines
  126. # define HK_ADD_GEOMETRY(geometries, transform, id) /* nothing */
  127. # define HK_SET_OBJECT_COLOR(id, color)
  128. # define HK_UPDATE_GEOMETRY(transform, id)
  129. # define HK_REMOVE_GEOMETRY(id)
  130. # define HK_UPDATE_CAMERA(from, to, up, nearPlane, farPlane, fov, name)
  131. # define HK_DISPLAY_POINT(position, color)
  132. # define HK_DISPLAY_LINE(start, end, color)
  133. # define HK_DISPLAY_TRIANGLE(a, b, c, color)
  134. # define HK_DISPLAY_RAY(start, dir, color)
  135. # define HK_DISPLAY_ARROW(start, end, color)
  136. # define HK_DISPLAY_STAR(pos, scale, color)
  137. # define HK_DISPLAY_PLANE(plane, offset, scale, color)
  138. # define HK_DISPLAY_TEXT(text, color)
  139. # define HK_DISPLAY_3D_TEXT(text, pos, color)
  140. #   define HK_DISPLAY_FRAME(worldFromLocal, size)
  141. # define HK_DISPLAY_GEOMETRY(geometries, color)
  142. # define HK_DISPLAY_GEOMETRY_WITH_TRANSFORM(geometries, transform, color)
  143. # define HK_DISPLAY_BOUNDING_BOX(aabb, color)
  144. #else // HK_DISABLE_DEBUG_DISPLAY
  145. // The debug display (display points and lines)
  146. // NOTE: Please refer to the hkDebugDisplay class definition above for
  147. // information on these macros parameters.  These calls are essentially
  148. // user versions of the calls in the hkDisplayHandler class interface,
  149. // please read its class description.
  150. # define HK_ADD_GEOMETRY(geometries, transform, id) hkDebugDisplay::getInstance().addGeometry(geometries, transform, id, 0, 0)
  151. # define HK_SET_OBJECT_COLOR(id, color) hkDebugDisplay::getInstance().setGeometryColor(color, id, 0)
  152. # define HK_UPDATE_GEOMETRY(transform, id) hkDebugDisplay::getInstance().updateGeometry(transform, id, 0)
  153. # define HK_REMOVE_GEOMETRY(id) hkDebugDisplay::getInstance().removeGeometry(id, 0, 0)
  154. # define HK_UPDATE_CAMERA(from, to, up, nearPlane, farPlane, fov, name) hkDebugDisplay::getInstance().updateCamera(from, to, up, nearPlane, farPlane, fov, name)
  155. # define HK_DISPLAY_POINT(position, color) hkDebugDisplay::getInstance().displayPoint(position, color, 0)
  156. # define HK_DISPLAY_LINE(start, end, color) hkDebugDisplay::getInstance().displayLine(start, end, color, 0)
  157. # define HK_DISPLAY_TRIANGLE(a, b, c, color) hkDebugDisplay::getInstance().displayTriangle(a,b,c, color, 0)
  158. # define HK_DISPLAY_LINE_MODEL(worldFromModel, start, end, color ) hkDebugDisplay::getInstance().displayLineModelSpace(worldFromModel, start, end, color, 0)
  159. # define HK_DISPLAY_RAY(start, dir, color) hkDebugDisplay::getInstance().displayRay(start, dir, color, 0)
  160. # define HK_DISPLAY_RAY_MODEL(worldFromModel, start, dir, color) hkDebugDisplay::getInstance().displayRayModelSpace(worldFromModel, start, dir, color, 0)
  161. # define HK_DISPLAY_ARROW(start, direction, color) hkDebugDisplay::getInstance().displayArrow(start, direction, color, 0)
  162. # define HK_DISPLAY_STAR(pos, scale, color) hkDebugDisplay::getInstance().displayStar(pos, scale, color, 0)
  163. # define HK_DISPLAY_STAR_MODEL(worldFromModel, pos, scale, color) hkDebugDisplay::getInstance().displayStarModelSpace(worldFromModel, pos, scale, color, 0)
  164. # define HK_DISPLAY_PLANE(plane, offset, scale, color) hkDebugDisplay::getInstance().displayPlane(plane, offset, scale, color, 0)
  165. # define HK_DISPLAY_TEXT(text, color) hkDebugDisplay::getInstance().displayText(text, color, 0)
  166. # define HK_DISPLAY_3D_TEXT(text, pos, color) hkDebugDisplay::getInstance().display3dText(text, pos, color, 0)
  167. #   define HK_DISPLAY_FRAME(worldFromLocal, size) hkDebugDisplay::getInstance().displayFrame( worldFromLocal, size, 0 )
  168. # define HK_DISPLAY_GEOMETRY(geometries, color) hkDebugDisplay::getInstance().displayGeometry(geometries, color, 0)
  169. # define HK_DISPLAY_GEOMETRY_WITH_TRANSFORM(geometeries, transform, color) hkDebugDisplay::getInstance().displayGeometry(geometeries, transform, color, 0)
  170. # define HK_DISPLAY_BOUNDING_BOX(aabb, color) hkDebugDisplay::getInstance().displayAabb(aabb, color, 0)
  171. #endif // HK_DISABLE_DEBUG_DISPLAY
  172. #endif // HK_VISUALIZE_DEBUG_DISPLAY_H
  173. /*
  174. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  175. * Confidential Information of Havok.  (C) Copyright 1999-2009
  176. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  177. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  178. * rights, and intellectual property rights in the Havok software remain in
  179. * Havok and/or its suppliers.
  180. * Use of this software for evaluation purposes is subject to and indicates
  181. * acceptance of the End User licence Agreement for this product. A copy of
  182. * the license is included with this software and is also available at www.havok.com/tryhavok.
  183. */