blender/extern/bullet/Bullet/NarrowPhaseCollision/ManifoldPoint.h

66 lines
1.5 KiB
C
Raw Normal View History

#ifndef MANIFOLD_CONTACT_POINT_H
#define MANIFOLD_CONTACT_POINT_H
#include "SimdVector3.h"
/// ManifoldContactPoint collects and maintains persistent contactpoints.
/// used to improve stability and performance of rigidbody dynamics response.
class ManifoldPoint
{
public:
ManifoldPoint()
{
}
ManifoldPoint( const SimdVector3 &pointA, const SimdVector3 &pointB,
const SimdVector3 &normal,
SimdScalar distance ) :
m_localPointA( pointA ),
m_localPointB( pointB ),
m_normalWorldOnB( normal ),
m_distance1( distance )
,m_appliedImpulse(0.f),
m_lifeTime(0)
{}
SimdVector3 m_localPointA;
SimdVector3 m_localPointB;
SimdVector3 m_positionWorldOnB;
///m_positionWorldOnA is redundant information, see GetPositionWorldOnA(), but for clarity
SimdVector3 m_positionWorldOnA;
SimdVector3 m_normalWorldOnB;
float m_distance1;
/// total applied impulse during most recent frame
float m_appliedImpulse;
int m_lifeTime;//lifetime of the contactpoint in frames
float GetDistance() const
{
return m_distance1;
}
int GetLifeTime() const
{
return m_lifeTime;
}
SimdVector3 GetPositionWorldOnA() {
return m_positionWorldOnA;
// return m_positionWorldOnB + m_normalWorldOnB * m_distance1;
}
const SimdVector3& GetPositionWorldOnB()
{
return m_positionWorldOnB;
}
void SetDistance(float dist)
{
m_distance1 = dist;
}
};
#endif //MANIFOLD_CONTACT_POINT_H