BulletSim: non-functional updates. Comments and formatting.
Update TODO list.cpu-performance
parent
c358d5d168
commit
5f97c6f8f0
|
@ -774,7 +774,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
|
|
||||||
// Since the computation of terrain height can be a little involved, this routine
|
// Since the computation of terrain height can be a little involved, this routine
|
||||||
// is used to fetch the height only once for each vehicle simulation step.
|
// is used to fetch the height only once for each vehicle simulation step.
|
||||||
Vector3 lastRememberedHeightPos;
|
Vector3 lastRememberedHeightPos = new Vector3(-1, -1, -1);
|
||||||
private float GetTerrainHeight(Vector3 pos)
|
private float GetTerrainHeight(Vector3 pos)
|
||||||
{
|
{
|
||||||
if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos)
|
if ((m_knownHas & m_knownChangedTerrainHeight) == 0 || pos != lastRememberedHeightPos)
|
||||||
|
@ -788,14 +788,16 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
|
|
||||||
// Since the computation of water level can be a little involved, this routine
|
// Since the computation of water level can be a little involved, this routine
|
||||||
// is used ot fetch the level only once for each vehicle simulation step.
|
// is used ot fetch the level only once for each vehicle simulation step.
|
||||||
|
Vector3 lastRememberedWaterHeightPos = new Vector3(-1, -1, -1);
|
||||||
private float GetWaterLevel(Vector3 pos)
|
private float GetWaterLevel(Vector3 pos)
|
||||||
{
|
{
|
||||||
if ((m_knownHas & m_knownChangedWaterLevel) == 0)
|
if ((m_knownHas & m_knownChangedWaterLevel) == 0 || pos != lastRememberedWaterHeightPos)
|
||||||
{
|
{
|
||||||
|
lastRememberedWaterHeightPos = pos;
|
||||||
m_knownWaterLevel = ControllingPrim.PhysScene.TerrainManager.GetWaterLevelAtXYZ(pos);
|
m_knownWaterLevel = ControllingPrim.PhysScene.TerrainManager.GetWaterLevelAtXYZ(pos);
|
||||||
m_knownHas |= m_knownChangedWaterLevel;
|
m_knownHas |= m_knownChangedWaterLevel;
|
||||||
}
|
}
|
||||||
return (float)m_knownWaterLevel;
|
return m_knownWaterLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 VehiclePosition
|
private Vector3 VehiclePosition
|
||||||
|
@ -991,11 +993,17 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
Vector3 vel = VehicleVelocity;
|
Vector3 vel = VehicleVelocity;
|
||||||
if ((m_flags & (VehicleFlag.NO_X)) != 0)
|
if ((m_flags & (VehicleFlag.NO_X)) != 0)
|
||||||
|
{
|
||||||
vel.X = 0;
|
vel.X = 0;
|
||||||
|
}
|
||||||
if ((m_flags & (VehicleFlag.NO_Y)) != 0)
|
if ((m_flags & (VehicleFlag.NO_Y)) != 0)
|
||||||
|
{
|
||||||
vel.Y = 0;
|
vel.Y = 0;
|
||||||
|
}
|
||||||
if ((m_flags & (VehicleFlag.NO_Z)) != 0)
|
if ((m_flags & (VehicleFlag.NO_Z)) != 0)
|
||||||
|
{
|
||||||
vel.Z = 0;
|
vel.Z = 0;
|
||||||
|
}
|
||||||
VehicleVelocity = vel;
|
VehicleVelocity = vel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,6 +188,8 @@ public class BSVMotor : BSMotor
|
||||||
CurrentValue = current;
|
CurrentValue = current;
|
||||||
return Step(timeStep);
|
return Step(timeStep);
|
||||||
}
|
}
|
||||||
|
// Given and error, computer a correction for this step.
|
||||||
|
// Simple scaling of the error by the timestep.
|
||||||
public virtual Vector3 StepError(float timeStep, Vector3 error)
|
public virtual Vector3 StepError(float timeStep, Vector3 error)
|
||||||
{
|
{
|
||||||
if (!Enabled) return Vector3.Zero;
|
if (!Enabled) return Vector3.Zero;
|
||||||
|
@ -221,7 +223,7 @@ public class BSVMotor : BSMotor
|
||||||
CurrentValue, TargetValue);
|
CurrentValue, TargetValue);
|
||||||
|
|
||||||
LastError = BSMotor.InfiniteVector;
|
LastError = BSMotor.InfiniteVector;
|
||||||
while (maxOutput-- > 0 && !LastError.ApproxEquals(Vector3.Zero, ErrorZeroThreshold))
|
while (maxOutput-- > 0 && !ErrorIsZero())
|
||||||
{
|
{
|
||||||
Vector3 lastStep = Step(timeStep);
|
Vector3 lastStep = Step(timeStep);
|
||||||
MDetailLog("{0},BSVMotor.Test,{1},cur={2},tgt={3},lastError={4},lastStep={5}",
|
MDetailLog("{0},BSVMotor.Test,{1},cur={2},tgt={3},lastError={4},lastStep={5}",
|
||||||
|
@ -375,7 +377,6 @@ public class BSPIDVMotor : BSVMotor
|
||||||
// The factors are vectors for the three dimensions. This is the proportional of each
|
// The factors are vectors for the three dimensions. This is the proportional of each
|
||||||
// that is applied. This could be multiplied through the actual factors but it
|
// that is applied. This could be multiplied through the actual factors but it
|
||||||
// is sometimes easier to manipulate the factors and their mix separately.
|
// is sometimes easier to manipulate the factors and their mix separately.
|
||||||
// to
|
|
||||||
public Vector3 FactorMix;
|
public Vector3 FactorMix;
|
||||||
|
|
||||||
// Arbritrary factor range.
|
// Arbritrary factor range.
|
||||||
|
@ -413,14 +414,14 @@ public class BSPIDVMotor : BSVMotor
|
||||||
// If efficiency is high (1f), use a factor value that moves the error value to zero with little overshoot.
|
// If efficiency is high (1f), use a factor value that moves the error value to zero with little overshoot.
|
||||||
// If efficiency is low (0f), use a factor value that overcorrects.
|
// If efficiency is low (0f), use a factor value that overcorrects.
|
||||||
// TODO: might want to vary contribution of different factor depending on efficiency.
|
// TODO: might want to vary contribution of different factor depending on efficiency.
|
||||||
float factor = ((1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow) / 3f;
|
// float factor = ((1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow) / 3f;
|
||||||
// float factor = (1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow;
|
float factor = (1f - this.Efficiency) * EfficiencyHigh + EfficiencyLow;
|
||||||
|
|
||||||
proportionFactor = new Vector3(factor, factor, factor);
|
proportionFactor = new Vector3(factor, factor, factor);
|
||||||
integralFactor = new Vector3(factor, factor, factor);
|
integralFactor = new Vector3(factor, factor, factor);
|
||||||
derivFactor = new Vector3(factor, factor, factor);
|
derivFactor = new Vector3(factor, factor, factor);
|
||||||
|
|
||||||
MDetailLog("{0},BSPIDVMotor.setEfficiency,eff={1},factor={2}", BSScene.DetailLogZero, Efficiency, factor);
|
MDetailLog("{0}, BSPIDVMotor.setEfficiency,eff={1},factor={2}", BSScene.DetailLogZero, Efficiency, factor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,8 +442,8 @@ public class BSPIDVMotor : BSVMotor
|
||||||
+ derivitive / TimeScale * derivFactor * FactorMix.Z
|
+ derivitive / TimeScale * derivFactor * FactorMix.Z
|
||||||
;
|
;
|
||||||
|
|
||||||
MDetailLog("{0}, BSPIDVMotor.step,ts={1},err={2},runnInt={3},deriv={4},ret={5}",
|
MDetailLog("{0}, BSPIDVMotor.step,ts={1},err={2},lerr={3},runnInt={4},deriv={5},ret={6}",
|
||||||
BSScene.DetailLogZero, timeStep, error, RunningIntegration, derivitive, ret);
|
BSScene.DetailLogZero, timeStep, error, LastError, RunningIntegration, derivitive, ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1125,7 +1125,9 @@ public class BSPrim : BSPhysObject
|
||||||
OMV.Vector3 addForce = force;
|
OMV.Vector3 addForce = force;
|
||||||
PhysScene.TaintedObject(inTaintTime, "BSPrim.AddForce", delegate()
|
PhysScene.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.
|
||||||
|
// Deep down in Bullet:
|
||||||
|
// linearVelocity += totalForce / mass * timeStep;
|
||||||
DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce);
|
DetailLog("{0},BSPrim.addForce,taint,force={1}", LocalID, addForce);
|
||||||
if (PhysBody.HasPhysicalBody)
|
if (PhysBody.HasPhysicalBody)
|
||||||
{
|
{
|
||||||
|
@ -1493,6 +1495,8 @@ public class BSPrim : BSPhysObject
|
||||||
|
|
||||||
returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass);
|
returnMass = Util.Clamp(returnMass, BSParam.MinimumObjectMass, BSParam.MaximumObjectMass);
|
||||||
// DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass);
|
// DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3}", LocalID, Density, volume, returnMass);
|
||||||
|
DetailLog("{0},BSPrim.CalculateMass,den={1},vol={2},mass={3},pathB={4},pathE={5},profB={6},profE={7},siz={8}",
|
||||||
|
LocalID, Density, volume, returnMass, pathBegin, pathEnd, profileBegin, profileEnd, _size);
|
||||||
|
|
||||||
return returnMass;
|
return returnMass;
|
||||||
}// end CalculateMass
|
}// end CalculateMass
|
||||||
|
|
|
@ -3,25 +3,21 @@ CURRENT PROBLEMS TO FIX AND/OR LOOK AT
|
||||||
Vehicle buoyancy. Computed correctly? Possibly creating very large effective mass.
|
Vehicle buoyancy. Computed correctly? Possibly creating very large effective mass.
|
||||||
Interaction of llSetBuoyancy and vehicle buoyancy. Should be additive?
|
Interaction of llSetBuoyancy and vehicle buoyancy. Should be additive?
|
||||||
Negative buoyancy computed correctly
|
Negative buoyancy computed correctly
|
||||||
|
Center-of-gravity
|
||||||
Computation of mesh mass. How done? How should it be done?
|
Computation of mesh mass. How done? How should it be done?
|
||||||
Script changing rotation of child prim while vehicle moving (eg turning wheel) causes
|
|
||||||
the wheel to appear to jump back. Looks like sending position from previous update.
|
|
||||||
Enable vehicle border crossings (at least as poorly as ODE)
|
Enable vehicle border crossings (at least as poorly as ODE)
|
||||||
Terrain skirts
|
Terrain skirts
|
||||||
Avatar created in previous region and not new region when crossing border
|
Avatar created in previous region and not new region when crossing border
|
||||||
Vehicle recreated in new sim at small Z value (offset from root value?) (DONE)
|
Vehicle recreated in new sim at small Z value (offset from root value?) (DONE)
|
||||||
|
User settable terrain mesh
|
||||||
|
Allow specifying as convex or concave and use different getHeight functions depending
|
||||||
|
Boats, when turning nose down into the water
|
||||||
|
Acts like rotation around Z is also effecting rotation around X and Y
|
||||||
Deleting a linkset while standing on the root will leave the physical shape of the root behind.
|
Deleting a linkset while standing on the root will leave the physical shape of the root behind.
|
||||||
Not sure if it is because standing on it. Done with large prim linksets.
|
Not sure if it is because standing on it. Done with large prim linksets.
|
||||||
Linkset child rotations.
|
Linkset child rotations.
|
||||||
Nebadon spiral tube has middle sections which are rotated wrong.
|
Nebadon spiral tube has middle sections which are rotated wrong.
|
||||||
Select linked spiral tube. Delink and note where the middle section ends up.
|
Select linked spiral tube. Delink and note where the middle section ends up.
|
||||||
Refarb compound linkset creation to create a pseudo-root for center-of-mass
|
|
||||||
Let children change their shape to physical indendently and just add shapes to compound
|
|
||||||
Vehicle angular vertical attraction
|
|
||||||
vehicle angular banking
|
|
||||||
Center-of-gravity
|
|
||||||
Vehicle angular deflection
|
|
||||||
Preferred orientation angular correction fix
|
|
||||||
Teravus llMoveToTarget script debug
|
Teravus llMoveToTarget script debug
|
||||||
Mixing of hover, buoyancy/gravity, moveToTarget, into one force
|
Mixing of hover, buoyancy/gravity, moveToTarget, into one force
|
||||||
Setting hover height to zero disables hover even if hover flags are on (from SL wiki)
|
Setting hover height to zero disables hover even if hover flags are on (from SL wiki)
|
||||||
|
@ -33,10 +29,16 @@ Vehicle script tuning/debugging
|
||||||
Avanti speed script
|
Avanti speed script
|
||||||
Weapon shooter script
|
Weapon shooter script
|
||||||
Move material definitions (friction, ...) into simulator.
|
Move material definitions (friction, ...) into simulator.
|
||||||
|
osGetPhysicsEngineVerion() and create a version code for the C++ DLL
|
||||||
One sided meshes? Should terrain be built into a closed shape?
|
One sided meshes? Should terrain be built into a closed shape?
|
||||||
When meshes get partially wedged into the terrain, they cannot push themselves out.
|
When meshes get partially wedged into the terrain, they cannot push themselves out.
|
||||||
It is possible that Bullet processes collisions whether entering or leaving a mesh.
|
It is possible that Bullet processes collisions whether entering or leaving a mesh.
|
||||||
Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869
|
Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869
|
||||||
|
Small physical objects do not interact correctly
|
||||||
|
Create chain of .5x.5x.1 torui and make all but top physical so to hang.
|
||||||
|
The chain will fall apart and pairs will dance around on ground
|
||||||
|
Chains of 1x1x.2 will stay connected but will dance.
|
||||||
|
Chains above 2x2x.4 are more stable and get stablier as torui get larger.
|
||||||
|
|
||||||
VEHICLES TODO LIST:
|
VEHICLES TODO LIST:
|
||||||
=================================================
|
=================================================
|
||||||
|
@ -45,14 +47,12 @@ LINEAR_MOTOR_DIRECTION values should be clamped to reasonable numbers.
|
||||||
Same for other velocity settings.
|
Same for other velocity settings.
|
||||||
UBit improvements to remove rubber-banding of avatars sitting on vehicle child prims:
|
UBit improvements to remove rubber-banding of avatars sitting on vehicle child prims:
|
||||||
https://github.com/UbitUmarov/Ubit-opensim
|
https://github.com/UbitUmarov/Ubit-opensim
|
||||||
Vehicles (Move smoothly)
|
|
||||||
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
|
||||||
Happens on terrain and any other mesh object. Flat cubes are much smoother.
|
Happens on terrain and any other mesh object. Flat cubes are much smoother.
|
||||||
This has been reduced but not eliminated.
|
This has been reduced but not eliminated.
|
||||||
Implement referenceFrame for all the motion routines.
|
Implement referenceFrame for all the motion routines.
|
||||||
For limitMotorUp, use raycast down to find if vehicle is in the air.
|
|
||||||
Verify llGetVel() is returning a smooth and good value for vehicle movement.
|
Verify llGetVel() is returning a smooth and good value for vehicle movement.
|
||||||
llGetVel() should return the root's velocity if requested in a child prim.
|
llGetVel() should return the root's velocity if requested in a child prim.
|
||||||
Implement function efficiency for lineaar and angular motion.
|
Implement function efficiency for lineaar and angular motion.
|
||||||
|
@ -93,29 +93,15 @@ Revisit CollisionMargin. Builders notice the 0.04 spacing between prims.
|
||||||
Duplicating a physical prim causes old prim to jump away
|
Duplicating a physical prim causes old prim to jump away
|
||||||
Dup a phys prim and the original become unselected and thus interacts w/ selected prim.
|
Dup a phys prim and the original become unselected and thus interacts w/ selected prim.
|
||||||
Scenes with hundred of thousands of static objects take a lot of physics CPU time.
|
Scenes with hundred of thousands of static objects take a lot of physics CPU time.
|
||||||
BSPrim.Force should set a continious force on the prim. The force should be
|
|
||||||
applied each tick. Some limits?
|
|
||||||
Gun sending shooter flying.
|
Gun sending shooter flying.
|
||||||
Collision margin (gap between physical objects lying on each other)
|
Collision margin (gap between physical objects lying on each other)
|
||||||
Boundry checking (crashes related to crossing boundry)
|
Boundry checking (crashes related to crossing boundry)
|
||||||
Add check for border edge position for avatars and objects.
|
Add check for border edge position for avatars and objects.
|
||||||
Verify the events are created for border crossings.
|
Verify the events are created for border crossings.
|
||||||
Avatar rotation (check out changes to ScenePresence for physical rotation)
|
|
||||||
Avatar running (what does phys engine need to do?)
|
|
||||||
Small physical objects do not interact correctly
|
|
||||||
Create chain of .5x.5x.1 torui and make all but top physical so to hang.
|
|
||||||
The chain will fall apart and pairs will dance around on ground
|
|
||||||
Chains of 1x1x.2 will stay connected but will dance.
|
|
||||||
Chains above 2x2x.4 are more stable and get stablier as torui get larger.
|
|
||||||
Add PID motor for avatar movement (slow to stop, ...)
|
|
||||||
setForce should set a constant force. Different than AddImpulse.
|
|
||||||
Implement raycast.
|
|
||||||
Implement ShapeCollection.Dispose()
|
Implement ShapeCollection.Dispose()
|
||||||
Implement water as a plain so raycasting and collisions can happen with same.
|
Implement water as a plain or mesh so raycasting and collisions can happen with same.
|
||||||
Add collision penetration return
|
Add collision penetration return
|
||||||
Add field passed back by BulletSim.dll and fill with info in ManifoldConstact.GetDistance()
|
Add field passed back by BulletSim.dll and fill with info in ManifoldConstact.GetDistance()
|
||||||
Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE
|
|
||||||
Also osGetPhysicsEngineVerion() maybe.
|
|
||||||
Linkset.Position and Linkset.Orientation requre rewrite to properly return
|
Linkset.Position and Linkset.Orientation requre rewrite to properly return
|
||||||
child position. LinksetConstraint acts like it's at taint time!!
|
child position. LinksetConstraint acts like it's at taint time!!
|
||||||
Implement LockAngularMotion -- implements llSetStatus(ROTATE_AXIS_*, T/F)
|
Implement LockAngularMotion -- implements llSetStatus(ROTATE_AXIS_*, T/F)
|
||||||
|
@ -127,9 +113,6 @@ Selecting and deselecting physical objects causes CPU processing time to jump
|
||||||
Re-implement buoyancy as a separate force on the object rather than diddling gravity.
|
Re-implement buoyancy as a separate force on the object rather than diddling gravity.
|
||||||
Register a pre-step event to add the force.
|
Register a pre-step event to add the force.
|
||||||
More efficient memory usage when passing hull information from BSPrim to BulletSim
|
More efficient memory usage when passing hull information from BSPrim to BulletSim
|
||||||
Avatar movement motor check for zero or small movement. Somehow suppress small movements
|
|
||||||
when avatar has stopped and is just standing. Simple test for near zero has
|
|
||||||
the problem of preventing starting up (increase from zero) especially when falling.
|
|
||||||
Physical and phantom will drop through the terrain
|
Physical and phantom will drop through the terrain
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,7 +155,6 @@ Do we need to do convex hulls all the time? Can complex meshes be left meshes?
|
||||||
There is some problem with meshes and collisions
|
There is some problem with meshes and collisions
|
||||||
Hulls are not as detailed as meshes. Hulled vehicles insides are different shape.
|
Hulls are not as detailed as meshes. Hulled vehicles insides are different shape.
|
||||||
Debounce avatar contact so legs don't keep folding up when standing.
|
Debounce avatar contact so legs don't keep folding up when standing.
|
||||||
Implement LSL physics controls. Like STATUS_ROTATE_X.
|
|
||||||
Add border extensions to terrain to help region crossings and objects leaving region.
|
Add border extensions to terrain to help region crossings and objects leaving region.
|
||||||
Use a different capsule shape for avatar when sitting
|
Use a different capsule shape for avatar when sitting
|
||||||
LL uses a pyrimidal shape scaled by the avatar's bounding box
|
LL uses a pyrimidal shape scaled by the avatar's bounding box
|
||||||
|
@ -205,8 +187,6 @@ Keep avatar scaling correct. http://pennycow.blogspot.fr/2011/07/matter-of-scale
|
||||||
|
|
||||||
INTERNAL IMPROVEMENT/CLEANUP
|
INTERNAL IMPROVEMENT/CLEANUP
|
||||||
=================================================
|
=================================================
|
||||||
Can the 'inTaintTime' flag be cleaned up and used? For instance, a call to
|
|
||||||
BSScene.TaintedObject() could immediately execute the callback if already in taint time.
|
|
||||||
Create the physical wrapper classes (BulletBody, BulletShape) by methods on
|
Create the physical wrapper classes (BulletBody, BulletShape) by methods on
|
||||||
BSAPITemplate and make their actual implementation Bullet engine specific.
|
BSAPITemplate and make their actual implementation Bullet engine specific.
|
||||||
For the short term, just call the existing functions in ShapeCollection.
|
For the short term, just call the existing functions in ShapeCollection.
|
||||||
|
@ -365,4 +345,35 @@ After getting off a vehicle, the root prim is phantom (can be walked through)
|
||||||
Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects.
|
Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects.
|
||||||
Regular triangle meshes don't do physical collisions.
|
Regular triangle meshes don't do physical collisions.
|
||||||
(DONE: discovered GImpact is VERY CPU intensive)
|
(DONE: discovered GImpact is VERY CPU intensive)
|
||||||
|
Script changing rotation of child prim while vehicle moving (eg turning wheel) causes
|
||||||
|
the wheel to appear to jump back. Looks like sending position from previous update.
|
||||||
|
(DONE: redo of compound linksets fixed problem)
|
||||||
|
Refarb compound linkset creation to create a pseudo-root for center-of-mass
|
||||||
|
Let children change their shape to physical indendently and just add shapes to compound
|
||||||
|
(DONE: redo of compound linkset fixed problem)
|
||||||
|
Vehicle angular vertical attraction (DONE: vegaslon code)
|
||||||
|
vehicle angular banking (DONE: vegaslon code)
|
||||||
|
Vehicle angular deflection (DONE: vegaslon code)
|
||||||
|
Preferred orientation angular correction fix
|
||||||
|
Vehicles (Move smoothly)
|
||||||
|
For limitMotorUp, use raycast down to find if vehicle is in the air.
|
||||||
|
(WILL NOT BE DONE: gravity does the job well enough)
|
||||||
|
BSPrim.Force should set a continious force on the prim. The force should be
|
||||||
|
applied each tick. Some limits?
|
||||||
|
(DONE: added physical actors. Implemented SetForce, SetTorque, ...)
|
||||||
|
Implement LSL physics controls. Like STATUS_ROTATE_X. (DONE)
|
||||||
|
Add osGetPhysicsEngineName() so scripters can tell whether BulletSim or ODE
|
||||||
|
Avatar rotation (check out changes to ScenePresence for physical rotation) (DONE)
|
||||||
|
Avatar running (what does phys engine need to do?) (DONE: multiplies run factor by walking force)
|
||||||
|
setForce should set a constant force. Different than AddImpulse. (DONE)
|
||||||
|
Add PID motor for avatar movement (slow to stop, ...) (WNBD: current works ok)
|
||||||
|
Avatar movement motor check for zero or small movement. Somehow suppress small movements
|
||||||
|
when avatar has stopped and is just standing. Simple test for near zero has
|
||||||
|
the problem of preventing starting up (increase from zero) especially when falling.
|
||||||
|
(DONE: avatar movement actor knows if standing on stationary object and zeros motion)
|
||||||
|
Can the 'inTaintTime' flag be cleaned up and used? For instance, a call to
|
||||||
|
BSScene.TaintedObject() could immediately execute the callback if already in taint time.
|
||||||
|
(DONE)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue