Some progress on upright constraints.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/switch_coordinate_system@4906 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
cd24969100
commit
3eae65cb89
@ -23,6 +23,7 @@ subject to the following restrictions:
|
||||
#include "BulletDynamics/Dynamics/btRigidBody.h"
|
||||
#include "LinearMath/btTransformUtil.h"
|
||||
|
||||
#include "karts/kart.hpp"
|
||||
//!
|
||||
//!
|
||||
//!
|
||||
@ -89,11 +90,13 @@ void btUprightConstraint::solveAngularLimit(
|
||||
//!
|
||||
//!
|
||||
|
||||
btUprightConstraint::btUprightConstraint(btRigidBody& rbA, const btTransform& frameInA )
|
||||
: btTypedConstraint(D6_CONSTRAINT_TYPE, rbA)
|
||||
btUprightConstraint::btUprightConstraint(const Kart *kart,
|
||||
const btTransform& frameInA)
|
||||
: btTypedConstraint(D6_CONSTRAINT_TYPE, *(kart->getBody()))
|
||||
, m_frameInA(frameInA)
|
||||
|
||||
{
|
||||
m_kart = kart;
|
||||
m_ERP = 1.0f;
|
||||
m_bounce = 0.0f;
|
||||
m_damping = 1.0f;
|
||||
@ -115,9 +118,8 @@ void btUprightConstraint::buildJacobian()
|
||||
{
|
||||
btTransform worldTransform = m_rbA.getCenterOfMassTransform() * m_frameInA;
|
||||
btVector3 upAxis = worldTransform.getBasis().getColumn(1);
|
||||
m_limit[ 0 ].m_angle = btAtan2( upAxis.getY(), upAxis.getZ() )-SIMD_PI/2.0f;
|
||||
m_limit[ 1 ].m_angle = -btAtan2( upAxis.getY(), upAxis.getX() )+SIMD_PI/2.0f;
|
||||
|
||||
m_limit[ 0 ].m_angle = m_kart->getHPR().getPitch();
|
||||
m_limit[ 1 ].m_angle = m_kart->getHPR().getRoll();
|
||||
for ( int i = 0; i < 2; i++ )
|
||||
{
|
||||
if ( m_limit[ i ].m_angle < -SIMD_PI )
|
||||
@ -148,7 +150,9 @@ void btUprightConstraint::solveConstraint(btScalar timeStep)
|
||||
if(m_disable_time>0.0f) return;
|
||||
}
|
||||
|
||||
solveAngularLimit( &m_limit[ 0 ], m_timeStep, btScalar(1.) / m_jacAng[ 0 ].getDiagonal(), &m_rbA );
|
||||
solveAngularLimit( &m_limit[ 1 ], m_timeStep, btScalar(1.) / m_jacAng[ 1 ].getDiagonal(), &m_rbA );
|
||||
solveAngularLimit( &m_limit[ 0 ], m_timeStep,
|
||||
btScalar(1.) / m_jacAng[ 0 ].getDiagonal(), &m_rbA );
|
||||
solveAngularLimit( &m_limit[ 1 ],
|
||||
m_timeStep, btScalar(1.) / m_jacAng[ 1 ].getDiagonal(), &m_rbA );
|
||||
}
|
||||
|
||||
|
@ -22,10 +22,7 @@ subject to the following restrictions:
|
||||
#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
|
||||
|
||||
class btRigidBody;
|
||||
|
||||
//!
|
||||
//!
|
||||
//!
|
||||
class Kart;
|
||||
|
||||
class btUprightConstraintLimit
|
||||
{
|
||||
@ -64,6 +61,7 @@ protected:
|
||||
btScalar m_hiLimit;
|
||||
btScalar m_loLimit;
|
||||
btScalar m_disable_time;
|
||||
const Kart* m_kart;
|
||||
|
||||
btUprightConstraintLimit m_limit[2];
|
||||
|
||||
@ -76,16 +74,16 @@ protected:
|
||||
return *this;
|
||||
}
|
||||
|
||||
void buildAngularJacobian(btJacobianEntry & jacAngular,const btVector3 & jointAxisW);
|
||||
void buildAngularJacobian(btJacobianEntry & jacAngular,
|
||||
const btVector3 & jointAxisW);
|
||||
|
||||
void solveAngularLimit(
|
||||
btUprightConstraintLimit *limit,
|
||||
void solveAngularLimit(btUprightConstraintLimit *limit,
|
||||
btScalar timeStep, btScalar jacDiagABInv,
|
||||
btRigidBody * body0 );
|
||||
|
||||
public:
|
||||
|
||||
btUprightConstraint(btRigidBody& rbA, const btTransform& frameInA );
|
||||
btUprightConstraint(const Kart *kart, const btTransform& frameInA );
|
||||
|
||||
// -PI,+PI is the full range
|
||||
// 0,0 is no rotation around x or z
|
||||
|
Loading…
x
Reference in New Issue
Block a user