1 /*************************************************************************
3 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
4 * All rights reserved. Email: russ@q12.org Web: www.q12.org *
6 * This library is free software; you can redistribute it and/or *
7 * modify it under the terms of EITHER: *
8 * (1) The GNU Lesser General Public License as published by the Free *
9 * Software Foundation; either version 2.1 of the License, or (at *
10 * your option) any later version. The text of the GNU Lesser *
11 * General Public License is included with this library in the *
13 * (2) The BSD-style license that is included with this library in *
14 * the file LICENSE-BSD.TXT. *
16 * This library is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
19 * LICENSE.TXT and LICENSE-BSD.TXT for more details. *
21 *************************************************************************/
23 #ifndef _ODE_CONTACT_H_
24 #define _ODE_CONTACT_H_
26 #include <ode/common.h>
35 dContactFDir1 = 0x002,
36 dContactBounce = 0x004,
37 dContactSoftERP = 0x008,
38 dContactSoftCFM = 0x010,
39 dContactMotion1 = 0x020,
40 dContactMotion2 = 0x040,
41 dContactMotionN = 0x080,
42 dContactSlip1 = 0x100,
43 dContactSlip2 = 0x200,
45 dContactApprox0 = 0x0000,
46 dContactApprox1_1 = 0x1000,
47 dContactApprox1_2 = 0x2000,
48 dContactApprox1 = 0x3000
52 typedef struct dSurfaceParameters {
53 /* must always be defined */
57 /* only defined if the corresponding flag is set in mode */
63 dReal motion1,motion2,motionN;
69 * @brief Describe the contact point between two geoms.
71 * If two bodies touch, or if a body touches a static feature in its
72 * environment, the contact is represented by one or more "contact
73 * points", described by dContactGeom.
75 * The convention is that if body 1 is moved along the normal vector by
76 * a distance depth (or equivalently if body 2 is moved the same distance
77 * in the opposite direction) then the contact depth will be reduced to
78 * zero. This means that the normal vector points "in" to body 1.
82 typedef struct dContactGeom {
83 dVector3 pos; ///< contact position
84 dVector3 normal; ///< normal vector
85 dReal depth; ///< penetration depth
86 dGeomID g1,g2; ///< the colliding geoms
87 int side1,side2; ///< (to be documented)
91 /* contact info used by contact joint */
93 typedef struct dContact {
94 dSurfaceParameters surface;