[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / src / BulletCollision / CollisionDispatch / btInternalEdgeUtility.h
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