BulletSim: scale the force for external AddForce by the simulation
step time so it will be applied completely the next step. The internal AddForce routine does not scale the force.0.7.5-pf-bulletsim
parent
d1ede1df3a
commit
225b564573
|
@ -1014,7 +1014,9 @@ public sealed class BSPrim : BSPhysObject
|
||||||
public override float APIDDamping { set { return; } }
|
public override float APIDDamping { set { return; } }
|
||||||
|
|
||||||
public override void AddForce(OMV.Vector3 force, bool pushforce) {
|
public override void AddForce(OMV.Vector3 force, bool pushforce) {
|
||||||
AddForce(force, pushforce, false);
|
// Since this force is being applied in only one step, make this a force per second.
|
||||||
|
OMV.Vector3 addForce = force / PhysicsScene.LastTimeStep;
|
||||||
|
AddForce(addForce, pushforce, false);
|
||||||
}
|
}
|
||||||
// Applying a force just adds this to the total force on the object.
|
// Applying a force just adds this to the total force on the object.
|
||||||
// This added force will only last the next simulation tick.
|
// This added force will only last the next simulation tick.
|
||||||
|
@ -1022,8 +1024,16 @@ public sealed class BSPrim : BSPhysObject
|
||||||
// for an object, doesn't matter if force is a pushforce or not
|
// for an object, doesn't matter if force is a pushforce or not
|
||||||
if (force.IsFinite())
|
if (force.IsFinite())
|
||||||
{
|
{
|
||||||
|
float magnitude = force.Length();
|
||||||
|
if (magnitude > 20000f)
|
||||||
|
{
|
||||||
|
// Force has a limit
|
||||||
|
force = force / magnitude * 20000f;
|
||||||
|
}
|
||||||
|
|
||||||
OMV.Vector3 addForce = force;
|
OMV.Vector3 addForce = force;
|
||||||
DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce);
|
DetailLog("{0},BSPrim.addForce,call,force={1}", LocalID, addForce);
|
||||||
|
|
||||||
PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate()
|
PhysicsScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate()
|
||||||
{
|
{
|
||||||
// Bullet adds this central force to the total force for this tick
|
// Bullet adds this central force to the total force for this tick
|
||||||
|
|
|
@ -495,6 +495,10 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
|
||||||
|
|
||||||
InTaintTime = false; // Only used for debugging so locking is not necessary.
|
InTaintTime = false; // Only used for debugging so locking is not necessary.
|
||||||
|
|
||||||
|
// The following causes the unmanaged code to output ALL the values found in ALL the objects in the world.
|
||||||
|
// Only enable this in a limited test world with few objects.
|
||||||
|
// BulletSimAPI.DumpAllInfo2(World.ptr); // DEBUG DEBUG DEBUG
|
||||||
|
|
||||||
// step the physical world one interval
|
// step the physical world one interval
|
||||||
m_simulationStep++;
|
m_simulationStep++;
|
||||||
int numSubSteps = 0;
|
int numSubSteps = 0;
|
||||||
|
|
|
@ -35,6 +35,8 @@ Border crossing with linked vehicle causes crash
|
||||||
Vehicles (Move smoothly)
|
Vehicles (Move smoothly)
|
||||||
Add vehicle collisions so IsColliding is properly reported.
|
Add vehicle collisions so IsColliding is properly reported.
|
||||||
Needed for banking, limitMotorUp, movementLimiting, ...
|
Needed for banking, limitMotorUp, movementLimiting, ...
|
||||||
|
VehicleAddForce is not scaled by the simulation step but it is only
|
||||||
|
applied for one step. Should it be scaled?
|
||||||
Some vehicles should not be able to turn if no speed or off ground.
|
Some vehicles should not be able to turn if no speed or off ground.
|
||||||
Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
|
Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
|
||||||
Neb car jiggling left and right
|
Neb car jiggling left and right
|
||||||
|
@ -92,6 +94,8 @@ Should the different PID factors have non-equal contributions for different
|
||||||
Selecting and deselecting physical objects causes CPU processing time to jump
|
Selecting and deselecting physical objects causes CPU processing time to jump
|
||||||
http://www.youtube.com/watch?v=Hjg57fWg8yI&hd=1
|
http://www.youtube.com/watch?v=Hjg57fWg8yI&hd=1
|
||||||
put thousand physical objects, select and deselect same. CPU time will be large.
|
put thousand physical objects, select and deselect same. CPU time will be large.
|
||||||
|
Re-implement buoyancy as a separate force on the object rather than diddling gravity.
|
||||||
|
Register a pre-step event to add the force.
|
||||||
|
|
||||||
LINKSETS
|
LINKSETS
|
||||||
======================================================
|
======================================================
|
||||||
|
|
Loading…
Reference in New Issue