Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2006-01-01 00:59:56 +0300
committerErwin Coumans <blender@erwincoumans.com>2006-01-01 00:59:56 +0300
commitbab1b90edc55251ceb5e3033d588347b48cceca4 (patch)
tree11a6863f68de3db92bbbfab77ca45c8603e5f5cf /source/gameengine/Physics
parent9119b6e8a547303ce9a7ccd3a00636153b53cb0e (diff)
more game engine bug-fixes, hooked up 'formfactor' as inertia tensor tweaker, friction/restitution, more scaling related fixes.
Diffstat (limited to 'source/gameengine/Physics')
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp21
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h8
2 files changed, 22 insertions, 7 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index bb4f1465b2d..ee3b0ffb528 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -63,7 +63,7 @@ void CcdPhysicsController::CreateRigidbody()
// init the rigidbody properly
//
- m_body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor);
+ m_body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
m_body->setGravity( m_cci.m_gravity);
m_body->setDamping(m_cci.m_linearDamping, m_cci.m_angularDamping);
m_body->setCenterOfMassTransform( trans );
@@ -237,15 +237,26 @@ void CcdPhysicsController::resolveCombinedVelocities(float linvelX,float linvel
void CcdPhysicsController::getPosition(PHY__Vector3& pos) const
{
- assert(0);
+ const SimdTransform& xform = m_body->getCenterOfMassTransform();
+ pos[0] = xform.getOrigin().x();
+ pos[1] = xform.getOrigin().y();
+ pos[2] = xform.getOrigin().z();
}
void CcdPhysicsController::setScaling(float scaleX,float scaleY,float scaleZ)
{
- if (m_body && m_body->GetCollisionShape())
+ if (!SimdFuzzyZero(m_cci.m_scaling.x()-scaleX) ||
+ !SimdFuzzyZero(m_cci.m_scaling.y()-scaleY) ||
+ !SimdFuzzyZero(m_cci.m_scaling.z()-scaleZ))
{
- SimdVector3 scaling(scaleX,scaleY,scaleZ);
- m_body->GetCollisionShape()->setLocalScaling(scaling);
+ m_cci.m_scaling = SimdVector3(scaleX,scaleY,scaleZ);
+
+ if (m_body && m_body->GetCollisionShape())
+ {
+ m_body->GetCollisionShape()->setLocalScaling(m_cci.m_scaling);
+ m_body->GetCollisionShape()->CalculateLocalInertia(m_cci.m_mass, m_cci.m_localInertiaTensor);
+ m_body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
+ }
}
}
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 87290f65fb4..3becd14028a 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -29,12 +29,15 @@ struct CcdConstructionInfo
m_angularDamping(0.1f),
m_MotionState(0),
m_collisionShape(0),
- m_physicsEnv(0)
-
+ m_physicsEnv(0),
+ m_inertiaFactor(1.f),
+ m_scaling(1.f,1.f,1.f)
{
}
+
SimdVector3 m_localInertiaTensor;
SimdVector3 m_gravity;
+ SimdVector3 m_scaling;
SimdScalar m_mass;
SimdScalar m_restitution;
SimdScalar m_friction;
@@ -45,6 +48,7 @@ struct CcdConstructionInfo
CollisionShape* m_collisionShape;
CcdPhysicsEnvironment* m_physicsEnv; //needed for self-replication
+ float m_inertiaFactor;//tweak the inertia (hooked up to Blender 'formfactor'
};