1 2 #ifndef BT_INTERNAL_EDGE_UTILITY_H 3 #define BT_INTERNAL_EDGE_UTILITY_H 4 5 #include "LinearMath/btHashMap.h" 6 #include "LinearMath/btVector3.h" 7 8 #include "BulletCollision/CollisionShapes/btTriangleInfoMap.h" 9 10 ///The btInternalEdgeUtility helps to avoid or reduce artifacts due to wrong collision normals caused by internal edges. 11 ///See also http://code.google.com/p/bullet/issues/detail?id=27 12 13 class btBvhTriangleMeshShape; 14 class btCollisionObject; 15 struct btCollisionObjectWrapper; 16 class btManifoldPoint; 17 class btIDebugDraw; 18 class btHeightfieldTerrainShape; 19 20 enum btInternalEdgeAdjustFlags 21 { 22 BT_TRIANGLE_CONVEX_BACKFACE_MODE = 1, 23 BT_TRIANGLE_CONCAVE_DOUBLE_SIDED = 2, //double sided options are experimental, single sided is recommended 24 BT_TRIANGLE_CONVEX_DOUBLE_SIDED = 4 25 }; 26 27 ///Call btGenerateInternalEdgeInfo to create triangle info, store in the shape 'userInfo' 28 void btGenerateInternalEdgeInfo(btBvhTriangleMeshShape* trimeshShape, btTriangleInfoMap* triangleInfoMap); 29 30 void btGenerateInternalEdgeInfo(btHeightfieldTerrainShape* trimeshShape, btTriangleInfoMap* triangleInfoMap); 31 32 ///Call the btFixMeshNormal to adjust the collision normal, using the triangle info map (generated using btGenerateInternalEdgeInfo) 33 ///If this info map is missing, or the triangle is not store in this map, nothing will be done 34 void btAdjustInternalEdgeContacts(btManifoldPoint& cp, const btCollisionObjectWrapper* trimeshColObj0Wrap, const btCollisionObjectWrapper* otherColObj1Wrap, int partId0, int index0, int normalAdjustFlags = 0); 35 36 ///Enable the BT_INTERNAL_EDGE_DEBUG_DRAW define and call btSetDebugDrawer, to get visual info to see if the internal edge utility works properly. 37 ///If the utility doesn't work properly, you might have to adjust the threshold values in btTriangleInfoMap 38 //#define BT_INTERNAL_EDGE_DEBUG_DRAW 39 40 #ifdef BT_INTERNAL_EDGE_DEBUG_DRAW 41 void btSetDebugDrawer(btIDebugDraw* debugDrawer); 42 #endif //BT_INTERNAL_EDGE_DEBUG_DRAW 43 44 #endif //BT_INTERNAL_EDGE_UTILITY_H 45