| [7983] | 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 | class btManifoldPoint; | 
|---|
|  | 16 | class btIDebugDraw; | 
|---|
|  | 17 |  | 
|---|
|  | 18 |  | 
|---|
|  | 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 |  | 
|---|
|  | 28 | ///Call btGenerateInternalEdgeInfo to create triangle info, store in the shape 'userInfo' | 
|---|
|  | 29 | void    btGenerateInternalEdgeInfo (btBvhTriangleMeshShape*trimeshShape, btTriangleInfoMap* triangleInfoMap); | 
|---|
|  | 30 |  | 
|---|
|  | 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 btCollisionObject* trimeshColObj0,const btCollisionObject* otherColObj1, 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 |  | 
|---|
|  | 45 | #endif //BT_INTERNAL_EDGE_UTILITY_H | 
|---|
|  | 46 |  | 
|---|