Blender V2.61 - r43446
|
00001 /* 00002 Bullet Continuous Collision Detection and Physics Library 00003 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ 00004 00005 This software is provided 'as-is', without any express or implied warranty. 00006 In no event will the authors be held liable for any damages arising from the use of this software. 00007 Permission is granted to anyone to use this software for any purpose, 00008 including commercial applications, and to alter it and redistribute it freely, 00009 subject to the following restrictions: 00010 00011 1. 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. 00012 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 00013 3. This notice may not be removed or altered from any source distribution. 00014 */ 00015 00016 #ifndef MANIFOLD_CONTACT_POINT_H 00017 #define 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 // Don't change following order of parameters 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_appliedImpulse(0.f), 00048 m_lateralFrictionInitialized(false), 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_combinedRestitution(btScalar(0.)), 00068 m_userPersistentData(0), 00069 m_appliedImpulse(0.f), 00070 m_lateralFrictionInitialized(false), 00071 m_appliedImpulseLateral1(0.f), 00072 m_appliedImpulseLateral2(0.f), 00073 m_contactMotion1(0.f), 00074 m_contactMotion2(0.f), 00075 m_contactCFM1(0.f), 00076 m_contactCFM2(0.f), 00077 m_lifeTime(0) 00078 { 00079 mConstraintRow[0].m_accumImpulse = 0.f; 00080 mConstraintRow[1].m_accumImpulse = 0.f; 00081 mConstraintRow[2].m_accumImpulse = 0.f; 00082 } 00083 00084 00085 00086 btVector3 m_localPointA; 00087 btVector3 m_localPointB; 00088 btVector3 m_positionWorldOnB; 00090 btVector3 m_positionWorldOnA; 00091 btVector3 m_normalWorldOnB; 00092 00093 btScalar m_distance1; 00094 btScalar m_combinedFriction; 00095 btScalar m_combinedRestitution; 00096 00097 //BP mod, store contact triangles. 00098 int m_partId0; 00099 int m_partId1; 00100 int m_index0; 00101 int m_index1; 00102 00103 mutable void* m_userPersistentData; 00104 btScalar m_appliedImpulse; 00105 00106 bool m_lateralFrictionInitialized; 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;//lifetime of the contactpoint in frames 00115 00116 btVector3 m_lateralFrictionDir1; 00117 btVector3 m_lateralFrictionDir2; 00118 00119 00120 00121 btConstraintRow mConstraintRow[3]; 00122 00123 00124 btScalar getDistance() const 00125 { 00126 return m_distance1; 00127 } 00128 int getLifeTime() const 00129 { 00130 return m_lifeTime; 00131 } 00132 00133 const btVector3& getPositionWorldOnA() const { 00134 return m_positionWorldOnA; 00135 // return m_positionWorldOnB + m_normalWorldOnB * m_distance1; 00136 } 00137 00138 const btVector3& getPositionWorldOnB() const 00139 { 00140 return m_positionWorldOnB; 00141 } 00142 00143 void setDistance(btScalar dist) 00144 { 00145 m_distance1 = dist; 00146 } 00147 00149 btScalar getAppliedImpulse() const 00150 { 00151 return m_appliedImpulse; 00152 } 00153 00154 00155 00156 }; 00157 00158 #endif //MANIFOLD_CONTACT_POINT_H