normalise physics plugins to return fps as (simulated time / requested simulation time). improved a bit old ode simulations per call math

avinationmerge
UbitUmarov 2015-09-04 09:42:33 +01:00
parent 1434cb88fd
commit ac4b2b2f50
6 changed files with 3442 additions and 2029 deletions

View File

@ -175,7 +175,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
actor.Velocity = actorVelocity;
}
return fps;
return 1.0f;
}
public override void GetResults()

View File

@ -710,7 +710,8 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
// The physics engine returns the number of milliseconds it simulated this call.
// These are summed and normalized to one second and divided by 1000 to give the reported physics FPS.
// Multiply by a fixed nominal frame rate to give a rate similar to the simulator (usually 55).
m_simulatedTime += (float)numSubSteps * m_fixedTimeStep * 1000f * NominalFrameRate;
// m_simulatedTime += (float)numSubSteps * m_fixedTimeStep * 1000f * NominalFrameRate;
m_simulatedTime += (float)numSubSteps * m_fixedTimeStep * 1000f;
}
// Called by a BSPhysObject to note that it has changed properties and this information
@ -797,7 +798,8 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
// Return the framerate simulated to give the above returned results.
// (Race condition here but this is just bookkeeping so rare mistakes do not merit a lock).
float simTime = m_simulatedTime;
// undo math above
float simTime = m_simulatedTime / timeStep;
m_simulatedTime = 0f;
return simTime;
}

View File

@ -1668,11 +1668,6 @@ namespace OpenSim.Region.Physics.OdePlugin
#region Add/Remove Entities
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying)
{
return AddAvatar(avName, position, size, isFlying);
}
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying)
{
Vector3 pos;
pos.X = position.X;
@ -3163,7 +3158,7 @@ namespace OpenSim.Region.Physics.OdePlugin
}
} // end lock OdeLock
return fps * 1000.0f; //NB This is a FRAME COUNT, not a time! AND is divide by 1000 in SimStatusReporter!
return fps * (float)ODE_STEPSIZE * 1000.0f / timeStep;
} // end Simulate
public override void GetResults()

File diff suppressed because it is too large Load Diff

View File

@ -238,7 +238,7 @@ namespace OpenSim.Region.Physics.POSPlugin
character._velocity.Z = (character.Position.Z - oldposZ)/timeStep;
}
}
return fps;
return 1.0f;
}
public override void GetResults()

View File

@ -1224,16 +1224,13 @@ namespace OpenSim.Region.Physics.OdePlugin
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying)
{
return AddAvatar(avName, position, size, isFlying);
return null;
}
public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying)
{
Vector3 pos;
pos.X = position.X;
pos.Y = position.Y;
pos.Z = position.Z;
OdeCharacter newAv = new OdeCharacter(localID,avName, this, pos, size, feetOffset, avDensity, avMovementDivisorWalk, avMovementDivisorRun);
OdeCharacter newAv = new OdeCharacter(localID, avName, this, position,
size, feetOffset, avDensity, avMovementDivisorWalk, avMovementDivisorRun);
newAv.Flying = isFlying;
newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset;
@ -1863,9 +1860,7 @@ namespace OpenSim.Region.Physics.OdePlugin
m_lastframe = DateTime.UtcNow; // skip also the time lost
}
}
// return nodeframes * ODE_STEPSIZE; // return real simulated time
return 1000 * nodeframes; // return steps for now * 1000 to keep core happy
return (float)nodeframes * ODE_STEPSIZE / timeStep * 1000.0f;
}
/// <summary>