reduce avatars terminal velocity to less than 30m/s or colisions with basic boxs fail badly. (ode lib problem. chode just may support a bit higher velocity due to the use of tilt).

avinationmerge
UbitUmarov 2012-05-10 22:44:12 +01:00
parent d0c0d37d24
commit 3c37bc2851
2 changed files with 9 additions and 6 deletions

View File

@ -734,9 +734,9 @@ namespace OpenSim.Region.Physics.OdePlugin
d.JointSetAMotorParam(Amotor, (int)d.JointParam.Vel2, 0); d.JointSetAMotorParam(Amotor, (int)d.JointParam.Vel2, 0);
d.JointSetAMotorParam(Amotor, (int)d.JointParam.Vel3, 0); d.JointSetAMotorParam(Amotor, (int)d.JointParam.Vel3, 0);
d.JointSetAMotorParam(Amotor, (int)dParam.FMax, 5e6f); d.JointSetAMotorParam(Amotor, (int)dParam.FMax, 5e8f);
d.JointSetAMotorParam(Amotor, (int)dParam.FMax2, 5e6f); d.JointSetAMotorParam(Amotor, (int)dParam.FMax2, 5e8f);
d.JointSetAMotorParam(Amotor, (int)dParam.FMax3, 5e6f); d.JointSetAMotorParam(Amotor, (int)dParam.FMax3, 5e8f);
} }
/// <summary> /// <summary>
@ -784,6 +784,8 @@ namespace OpenSim.Region.Physics.OdePlugin
// the Amotor still lets avatar rotation to drift during colisions // the Amotor still lets avatar rotation to drift during colisions
// so force it back to identity // so force it back to identity
d.Quaternion qtmp; d.Quaternion qtmp;
qtmp.W = 1; qtmp.W = 1;
qtmp.X = 0; qtmp.X = 0;
@ -1004,9 +1006,9 @@ namespace OpenSim.Region.Physics.OdePlugin
} }
} }
if (velLengthSquared > 2500.0f) // 50m/s apply breaks if (velLengthSquared > 625.0f) // 25m/s apply breaks
{ {
breakfactor = 0.16f * m_mass; breakfactor = 0.31f * m_mass;
vec.X -= breakfactor * vel.X; vec.X -= breakfactor * vel.X;
vec.Y -= breakfactor * vel.Y; vec.Y -= breakfactor * vel.Y;
vec.Z -= breakfactor * vel.Z; vec.Z -= breakfactor * vel.Z;

View File

@ -536,7 +536,8 @@ namespace OpenSim.Region.Physics.OdePlugin
// This is in addition to the step size. // This is in addition to the step size.
// Essentially Steps * m_physicsiterations // Essentially Steps * m_physicsiterations
d.WorldSetQuickStepNumIterations(world, m_physicsiterations); d.WorldSetQuickStepNumIterations(world, m_physicsiterations);
d.WorldSetContactMaxCorrectingVel(world, 100.0f);
d.WorldSetContactMaxCorrectingVel(world, 50.0f);
spacesPerMeter = 1 / metersInSpace; spacesPerMeter = 1 / metersInSpace;
spaceGridMaxX = (int)(WorldExtents.X * spacesPerMeter); spaceGridMaxX = (int)(WorldExtents.X * spacesPerMeter);