Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BT_MANIFOLD_CONTACT_POINT_H
00017 #define BT_MANIFOLD_CONTACT_POINT_H
00018
00019 #include "LinearMath/btVector3.h"
00020 #include "LinearMath/btTransformUtil.h"
00021
00022 #ifdef PFX_USE_FREE_VECTORMATH
00023 #include "physics_effects/base_level/solver/pfx_constraint_row.h"
00024 typedef sce::PhysicsEffects::PfxConstraintRow btConstraintRow;
00025 #else
00026
00027 ATTRIBUTE_ALIGNED16(struct) btConstraintRow {
00028 btScalar m_normal[3];
00029 btScalar m_rhs;
00030 btScalar m_jacDiagInv;
00031 btScalar m_lowerLimit;
00032 btScalar m_upperLimit;
00033 btScalar m_accumImpulse;
00034 };
00035 typedef btConstraintRow PfxConstraintRow;
00036 #endif //PFX_USE_FREE_VECTORMATH
00037
00038
00039
00042 class btManifoldPoint
00043 {
00044 public:
00045 btManifoldPoint()
00046 :m_userPersistentData(0),
00047 m_lateralFrictionInitialized(false),
00048 m_appliedImpulse(0.f),
00049 m_appliedImpulseLateral1(0.f),
00050 m_appliedImpulseLateral2(0.f),
00051 m_contactMotion1(0.f),
00052 m_contactMotion2(0.f),
00053 m_contactCFM1(0.f),
00054 m_contactCFM2(0.f),
00055 m_lifeTime(0)
00056 {
00057 }
00058
00059 btManifoldPoint( const btVector3 &pointA, const btVector3 &pointB,
00060 const btVector3 &normal,
00061 btScalar distance ) :
00062 m_localPointA( pointA ),
00063 m_localPointB( pointB ),
00064 m_normalWorldOnB( normal ),
00065 m_distance1( distance ),
00066 m_combinedFriction(btScalar(0.)),
00067 m_combinedRollingFriction(btScalar(0.)),
00068 m_combinedRestitution(btScalar(0.)),
00069 m_userPersistentData(0),
00070 m_lateralFrictionInitialized(false),
00071 m_appliedImpulse(0.f),
00072 m_appliedImpulseLateral1(0.f),
00073 m_appliedImpulseLateral2(0.f),
00074 m_contactMotion1(0.f),
00075 m_contactMotion2(0.f),
00076 m_contactCFM1(0.f),
00077 m_contactCFM2(0.f),
00078 m_lifeTime(0)
00079 {
00080
00081 }
00082
00083
00084
00085 btVector3 m_localPointA;
00086 btVector3 m_localPointB;
00087 btVector3 m_positionWorldOnB;
00089 btVector3 m_positionWorldOnA;
00090 btVector3 m_normalWorldOnB;
00091
00092 btScalar m_distance1;
00093 btScalar m_combinedFriction;
00094 btScalar m_combinedRollingFriction;
00095 btScalar m_combinedRestitution;
00096
00097
00098 int m_partId0;
00099 int m_partId1;
00100 int m_index0;
00101 int m_index1;
00102
00103 mutable void* m_userPersistentData;
00104 bool m_lateralFrictionInitialized;
00105
00106 btScalar m_appliedImpulse;
00107 btScalar m_appliedImpulseLateral1;
00108 btScalar m_appliedImpulseLateral2;
00109 btScalar m_contactMotion1;
00110 btScalar m_contactMotion2;
00111 btScalar m_contactCFM1;
00112 btScalar m_contactCFM2;
00113
00114 int m_lifeTime;
00115
00116 btVector3 m_lateralFrictionDir1;
00117 btVector3 m_lateralFrictionDir2;
00118
00119
00120
00121
00122 btScalar getDistance() const
00123 {
00124 return m_distance1;
00125 }
00126 int getLifeTime() const
00127 {
00128 return m_lifeTime;
00129 }
00130
00131 const btVector3& getPositionWorldOnA() const {
00132 return m_positionWorldOnA;
00133
00134 }
00135
00136 const btVector3& getPositionWorldOnB() const
00137 {
00138 return m_positionWorldOnB;
00139 }
00140
00141 void setDistance(btScalar dist)
00142 {
00143 m_distance1 = dist;
00144 }
00145
00147 btScalar getAppliedImpulse() const
00148 {
00149 return m_appliedImpulse;
00150 }
00151
00152
00153
00154 };
00155
00156 #endif //BT_MANIFOLD_CONTACT_POINT_H