Partialy fixed a bug with collisions in BulletXPlugin.
parent
4faa824c3e
commit
bda35705e6
|
@ -69,8 +69,6 @@ using XnaDevRu.BulletX;
|
||||||
using XnaDevRu.BulletX.Dynamics;
|
using XnaDevRu.BulletX.Dynamics;
|
||||||
using AxiomQuaternion = Axiom.Math.Quaternion;
|
using AxiomQuaternion = Axiom.Math.Quaternion;
|
||||||
using BoxShape=XnaDevRu.BulletX.BoxShape;
|
using BoxShape=XnaDevRu.BulletX.BoxShape;
|
||||||
//Specific References for BulletXPlugin
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
namespace OpenSim.Region.Physics.BulletXPlugin
|
namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
|
@ -734,7 +732,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
return rigidBody;
|
return rigidBody;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public MonoXnaCompactMaths.Vector3 RigidBodyPosition
|
public Vector3 RigidBodyPosition
|
||||||
{
|
{
|
||||||
get { return this.rigidBody.CenterOfMassPosition; }
|
get { return this.rigidBody.CenterOfMassPosition; }
|
||||||
}
|
}
|
||||||
|
@ -804,7 +802,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
}
|
}
|
||||||
internal protected void Translate(PhysicsVector _newPos)
|
internal protected void Translate(PhysicsVector _newPos)
|
||||||
{
|
{
|
||||||
MonoXnaCompactMaths.Vector3 _translation;
|
Vector3 _translation;
|
||||||
_translation = BulletXMaths.PhysicsVectorToXnaVector3(_newPos) - rigidBody.CenterOfMassPosition;
|
_translation = BulletXMaths.PhysicsVectorToXnaVector3(_newPos) - rigidBody.CenterOfMassPosition;
|
||||||
rigidBody.Translate(_translation);
|
rigidBody.Translate(_translation);
|
||||||
}
|
}
|
||||||
|
@ -814,7 +812,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
}
|
}
|
||||||
internal protected void Speed(PhysicsVector _newSpeed)
|
internal protected void Speed(PhysicsVector _newSpeed)
|
||||||
{
|
{
|
||||||
MonoXnaCompactMaths.Vector3 _speed;
|
Vector3 _speed;
|
||||||
_speed = BulletXMaths.PhysicsVectorToXnaVector3(_newSpeed);
|
_speed = BulletXMaths.PhysicsVectorToXnaVector3(_newSpeed);
|
||||||
rigidBody.LinearVelocity = _speed;
|
rigidBody.LinearVelocity = _speed;
|
||||||
}
|
}
|
||||||
|
@ -824,7 +822,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
}
|
}
|
||||||
internal protected void ReOrient(AxiomQuaternion _newOrient)
|
internal protected void ReOrient(AxiomQuaternion _newOrient)
|
||||||
{
|
{
|
||||||
MonoXnaCompactMaths.Quaternion _newOrientation;
|
Quaternion _newOrientation;
|
||||||
_newOrientation = BulletXMaths.AxiomQuaternionToXnaQuaternion(_newOrient);
|
_newOrientation = BulletXMaths.AxiomQuaternionToXnaQuaternion(_newOrient);
|
||||||
Matrix _comTransform = rigidBody.CenterOfMassTransform;
|
Matrix _comTransform = rigidBody.CenterOfMassTransform;
|
||||||
BulletXMaths.SetRotation(ref _comTransform, _newOrientation);
|
BulletXMaths.SetRotation(ref _comTransform, _newOrientation);
|
||||||
|
@ -1033,6 +1031,9 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
if (rotation.Norm == 0f) rotation = AxiomQuaternion.Identity;
|
if (rotation.Norm == 0f) rotation = AxiomQuaternion.Identity;
|
||||||
|
|
||||||
_position = pos;
|
_position = pos;
|
||||||
|
//ZZZ
|
||||||
|
_physical = false;
|
||||||
|
//zzz
|
||||||
if (_physical) _velocity = velocity;
|
if (_physical) _velocity = velocity;
|
||||||
else _velocity = new PhysicsVector();
|
else _velocity = new PhysicsVector();
|
||||||
_size = size;
|
_size = size;
|
||||||
|
@ -1041,32 +1042,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
|
|
||||||
_parent_scene = parent_scene;
|
_parent_scene = parent_scene;
|
||||||
|
|
||||||
//For RigidBody Constructor. The next values might change
|
CreateRigidBody(parent_scene, pos, size);
|
||||||
float _linearDamping = 0.0f;
|
|
||||||
float _angularDamping = 0.0f;
|
|
||||||
float _friction = 0.5f;
|
|
||||||
float _restitution = 0.0f;
|
|
||||||
Matrix _startTransform = Matrix.Identity;
|
|
||||||
Matrix _centerOfMassOffset = Matrix.Identity;
|
|
||||||
lock (BulletXScene.BulletXLock)
|
|
||||||
{
|
|
||||||
_startTransform.Translation = BulletXMaths.PhysicsVectorToXnaVector3(pos);
|
|
||||||
//For now all prims are boxes
|
|
||||||
CollisionShape _collisionShape = new BoxShape(BulletXMaths.PhysicsVectorToXnaVector3(_size)/2.0f);
|
|
||||||
DefaultMotionState _motionState = new DefaultMotionState(_startTransform, _centerOfMassOffset);
|
|
||||||
Vector3 _localInertia = new Vector3();
|
|
||||||
if (_physical) _collisionShape.CalculateLocalInertia(Mass, out _localInertia); //Always when mass > 0
|
|
||||||
rigidBody =
|
|
||||||
new RigidBody(Mass, _motionState, _collisionShape, _localInertia, _linearDamping, _angularDamping,
|
|
||||||
_friction, _restitution);
|
|
||||||
//rigidBody.ActivationState = ActivationState.DisableDeactivation;
|
|
||||||
//It's seems that there are a bug with rigidBody constructor and its CenterOfMassPosition
|
|
||||||
Vector3 _vDebugTranslation;
|
|
||||||
_vDebugTranslation = _startTransform.Translation - rigidBody.CenterOfMassPosition;
|
|
||||||
rigidBody.Translate(_vDebugTranslation);
|
|
||||||
//---
|
|
||||||
parent_scene.ddWorld.AddRigidBody(rigidBody);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsVector Position
|
public override PhysicsVector Position
|
||||||
|
@ -1108,7 +1084,10 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
//For now all prims are boxes
|
//For now all prims are boxes
|
||||||
return (_physical ? 1 : 0) * _density * _size.X * _size.Y * _size.Z;
|
//ZZZ
|
||||||
|
return _density * _size.X * _size.Y * _size.Z;
|
||||||
|
//return (_physical ? 1 : 0) * _density * _size.X * _size.Y * _size.Z;
|
||||||
|
//zzz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Boolean Physical
|
public Boolean Physical
|
||||||
|
@ -1210,7 +1189,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
//For RigidBody Constructor. The next values might change
|
//For RigidBody Constructor. The next values might change
|
||||||
float _linearDamping = 0.0f;
|
float _linearDamping = 0.0f;
|
||||||
float _angularDamping = 0.0f;
|
float _angularDamping = 0.0f;
|
||||||
float _friction = 0.5f;
|
float _friction = 1.0f;
|
||||||
float _restitution = 0.0f;
|
float _restitution = 0.0f;
|
||||||
Matrix _startTransform = Matrix.Identity;
|
Matrix _startTransform = Matrix.Identity;
|
||||||
Matrix _centerOfMassOffset = Matrix.Identity;
|
Matrix _centerOfMassOffset = Matrix.Identity;
|
||||||
|
@ -1220,12 +1199,15 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
//For now all prims are boxes
|
//For now all prims are boxes
|
||||||
CollisionShape _collisionShape = new XnaDevRu.BulletX.BoxShape(BulletXMaths.PhysicsVectorToXnaVector3(size) / 2.0f);
|
CollisionShape _collisionShape = new XnaDevRu.BulletX.BoxShape(BulletXMaths.PhysicsVectorToXnaVector3(size) / 2.0f);
|
||||||
DefaultMotionState _motionState = new DefaultMotionState(_startTransform, _centerOfMassOffset);
|
DefaultMotionState _motionState = new DefaultMotionState(_startTransform, _centerOfMassOffset);
|
||||||
MonoXnaCompactMaths.Vector3 _localInertia = new MonoXnaCompactMaths.Vector3();
|
Vector3 _localInertia = new Vector3();
|
||||||
if (_physical) _collisionShape.CalculateLocalInertia(Mass, out _localInertia); //Always when mass > 0
|
//ZZZ
|
||||||
|
if (Mass > 0) _collisionShape.CalculateLocalInertia(Mass, out _localInertia); //Always when mass > 0
|
||||||
|
//if (_physical) _collisionShape.CalculateLocalInertia(Mass, out _localInertia); //Always when mass > 0
|
||||||
|
//zzz
|
||||||
rigidBody = new RigidBody(Mass, _motionState, _collisionShape, _localInertia, _linearDamping, _angularDamping, _friction, _restitution);
|
rigidBody = new RigidBody(Mass, _motionState, _collisionShape, _localInertia, _linearDamping, _angularDamping, _friction, _restitution);
|
||||||
//rigidBody.ActivationState = ActivationState.DisableDeactivation;
|
//rigidBody.ActivationState = ActivationState.DisableDeactivation;
|
||||||
//It's seems that there are a bug with rigidBody constructor and its CenterOfMassPosition
|
//It's seems that there are a bug with rigidBody constructor and its CenterOfMassPosition
|
||||||
MonoXnaCompactMaths.Vector3 _vDebugTranslation;
|
Vector3 _vDebugTranslation;
|
||||||
_vDebugTranslation = _startTransform.Translation - rigidBody.CenterOfMassPosition;
|
_vDebugTranslation = _startTransform.Translation - rigidBody.CenterOfMassPosition;
|
||||||
rigidBody.Translate(_vDebugTranslation);
|
rigidBody.Translate(_vDebugTranslation);
|
||||||
//---
|
//---
|
||||||
|
|
Loading…
Reference in New Issue