change maximum angular velocity to a value derived from heartbeat rate and Nyquist.
parent
eccc6f1081
commit
185d3bd39e
|
@ -1806,7 +1806,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
d.BodySetAutoDisableSteps(Body, body_autodisable_frames);
|
d.BodySetAutoDisableSteps(Body, body_autodisable_frames);
|
||||||
d.BodySetAutoDisableAngularThreshold(Body, 0.05f);
|
d.BodySetAutoDisableAngularThreshold(Body, 0.05f);
|
||||||
d.BodySetAutoDisableLinearThreshold(Body, 0.05f);
|
d.BodySetAutoDisableLinearThreshold(Body, 0.05f);
|
||||||
d.BodySetDamping(Body, .008f, .005f);
|
d.BodySetDamping(Body, .004f, .001f);
|
||||||
|
|
||||||
if (m_targetSpace != IntPtr.Zero)
|
if (m_targetSpace != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -2070,8 +2070,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
_mass = objdmass.mass;
|
_mass = objdmass.mass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void FixInertia(Vector3 NewPos)
|
private void FixInertia(Vector3 NewPos)
|
||||||
{
|
{
|
||||||
d.Matrix3 primmat = new d.Matrix3();
|
d.Matrix3 primmat = new d.Matrix3();
|
||||||
|
@ -3135,9 +3133,9 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
private void changeangvelocity(Vector3 newAngVel)
|
private void changeangvelocity(Vector3 newAngVel)
|
||||||
{
|
{
|
||||||
float len = newAngVel.LengthSquared();
|
float len = newAngVel.LengthSquared();
|
||||||
if (len > 144.0f) // limit to 12rad/s
|
if (len > _parent_scene.maxAngVelocitySQ)
|
||||||
{
|
{
|
||||||
len = 12.0f / (float)Math.Sqrt(len);
|
len = _parent_scene.maximumAngularVelocity / (float)Math.Sqrt(len);
|
||||||
newAngVel *= len;
|
newAngVel *= len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -216,9 +216,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
private float avMovementDivisorRun = 0.8f;
|
private float avMovementDivisorRun = 0.8f;
|
||||||
private float minimumGroundFlightOffset = 3f;
|
private float minimumGroundFlightOffset = 3f;
|
||||||
public float maximumMassObject = 10000.01f;
|
public float maximumMassObject = 10000.01f;
|
||||||
|
|
||||||
public float geomDefaultDensity = 10.0f;
|
public float geomDefaultDensity = 10.0f;
|
||||||
|
|
||||||
|
public float maximumAngularVelocity = 12.0f; // default 12rad/s
|
||||||
|
public float maxAngVelocitySQ = 144f; // squared value
|
||||||
|
|
||||||
public float bodyPIDD = 35f;
|
public float bodyPIDD = 35f;
|
||||||
public float bodyPIDG = 25;
|
public float bodyPIDG = 25;
|
||||||
|
|
||||||
|
@ -493,6 +495,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float heartbeat = 1/m_frameWorkScene.MinFrameTime;
|
||||||
|
maximumAngularVelocity = 0.49f * heartbeat *(float)Math.PI;
|
||||||
|
maxAngVelocitySQ = maximumAngularVelocity * maximumAngularVelocity;
|
||||||
|
|
||||||
d.WorldSetCFM(world, comumContactCFM);
|
d.WorldSetCFM(world, comumContactCFM);
|
||||||
d.WorldSetERP(world, comumContactERP);
|
d.WorldSetERP(world, comumContactERP);
|
||||||
|
|
||||||
|
@ -502,7 +508,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
d.WorldSetAngularDamping(world, 0.002f);
|
d.WorldSetAngularDamping(world, 0.002f);
|
||||||
d.WorldSetAngularDampingThreshold(world, 0f);
|
d.WorldSetAngularDampingThreshold(world, 0f);
|
||||||
d.WorldSetLinearDampingThreshold(world, 0f);
|
d.WorldSetLinearDampingThreshold(world, 0f);
|
||||||
d.WorldSetMaxAngularSpeed(world, 100f);
|
d.WorldSetMaxAngularSpeed(world, maximumAngularVelocity);
|
||||||
|
|
||||||
d.WorldSetQuickStepNumIterations(world, m_physicsiterations);
|
d.WorldSetQuickStepNumIterations(world, m_physicsiterations);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue