Bullet Collision Detection & Physics Library
btManifoldPoint.h
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2006 Erwin Coumans https://bulletphysics.org
4
5This software is provided 'as-is', without any express or implied warranty.
6In no event will the authors be held liable for any damages arising from the use of this software.
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it freely,
9subject to the following restrictions:
10
111. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
122. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
133. This notice may not be removed or altered from any source distribution.
14*/
15
16#ifndef BT_MANIFOLD_CONTACT_POINT_H
17#define BT_MANIFOLD_CONTACT_POINT_H
18
21
22#ifdef PFX_USE_FREE_VECTORMATH
23#include "physics_effects/base_level/solver/pfx_constraint_row.h"
25#else
26// Don't change following order of parameters
29{
30 btScalar m_normal[3];
36};
38#endif //PFX_USE_FREE_VECTORMATH
39
41{
47};
48
52{
53public:
58 m_prevRHS(0.f),
63 m_contactCFM(0.f),
64 m_contactERP(0.f),
65 m_frictionCFM(0.f),
66 m_lifeTime(0)
67 {
68 }
69
70 btManifoldPoint(const btVector3& pointA, const btVector3& pointB,
71 const btVector3& normal,
72 btScalar distance) : m_localPointA(pointA),
73 m_localPointB(pointB),
74 m_positionWorldOnB(0,0,0),
75 m_positionWorldOnA(0,0,0),
76 m_normalWorldOnB(normal),
77 m_distance1(distance),
82 m_partId0(-1),
83 m_partId1(-1),
84 m_index0(-1),
85 m_index1(-1),
89 m_prevRHS(0.f),
94 m_contactCFM(0.f),
95 m_contactERP(0.f),
96 m_frictionCFM(0.f),
97 m_lifeTime(0),
100 {
101 }
102
109
112 btScalar m_combinedRollingFriction; //torsional friction orthogonal to contact normal, useful to make spheres stop rolling forever
113 btScalar m_combinedSpinningFriction; //torsional friction around contact normal, useful for grasping objects
115
116 //BP mod, store contact triangles.
121
122 mutable void* m_userPersistentData;
123 //bool m_lateralFrictionInitialized;
125
132
133 union {
136 };
137
138 union {
141 };
142
144
145 int m_lifeTime; //lifetime of the contactpoint in frames
146
149
151 {
152 return m_distance1;
153 }
154 int getLifeTime() const
155 {
156 return m_lifeTime;
157 }
158
160 {
161 return m_positionWorldOnA;
162 // return m_positionWorldOnB + m_normalWorldOnB * m_distance1;
163 }
164
166 {
167 return m_positionWorldOnB;
168 }
169
171 {
172 m_distance1 = dist;
173 }
174
177 {
178 return m_appliedImpulse;
179 }
180};
181
182#endif //BT_MANIFOLD_CONTACT_POINT_H
btContactPointFlags
@ BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED
@ BT_CONTACT_FLAG_HAS_CONTACT_ERP
@ BT_CONTACT_FLAG_HAS_CONTACT_CFM
@ BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING
@ BT_CONTACT_FLAG_FRICTION_ANCHOR
btConstraintRow PfxConstraintRow
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:99
ManifoldContactPoint collects and maintains persistent contactpoints.
btScalar m_frictionCFM
btScalar m_combinedSpinningFriction
btScalar m_combinedRollingFriction
btScalar getDistance() const
btScalar m_combinedContactStiffness1
int getLifeTime() const
btScalar m_combinedRestitution
btVector3 m_localPointA
btVector3 m_lateralFrictionDir2
btVector3 m_positionWorldOnA
m_positionWorldOnA is redundant information, see getPositionWorldOnA(), but for clarity
btVector3 m_localPointB
btScalar m_combinedContactDamping1
const btVector3 & getPositionWorldOnB() const
btScalar m_appliedImpulseLateral2
const btVector3 & getPositionWorldOnA() const
btScalar m_appliedImpulse
void setDistance(btScalar dist)
void * m_userPersistentData
btScalar m_appliedImpulseLateral1
btVector3 m_normalWorldOnB
btScalar m_combinedFriction
btVector3 m_positionWorldOnB
btScalar m_contactMotion2
btScalar getAppliedImpulse() const
this returns the most recent applied impulse, to satisfy contact constraints by the constraint solver
btVector3 m_lateralFrictionDir1
btScalar m_contactMotion1
btManifoldPoint(const btVector3 &pointA, const btVector3 &pointB, const btVector3 &normal, btScalar distance)
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:82
btScalar m_jacDiagInv
btScalar m_upperLimit
btScalar m_lowerLimit
btScalar m_accumImpulse