BulletSim: remove double application of buoyancy. Centralize computation of buoyancy. Add motor angular debugging controls.
parent
b592ec265b
commit
98168edc29
|
@ -124,6 +124,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
||||||
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
||||||
|
|
||||||
|
// For debugging, flags to turn on and off individual corrections.
|
||||||
|
private bool enableAngularVerticalAttraction = true;
|
||||||
|
private bool enableAngularDeflection = true;
|
||||||
|
private bool enableAngularBanking = true;
|
||||||
|
|
||||||
public BSDynamics(BSScene myScene, BSPrim myPrim)
|
public BSDynamics(BSScene myScene, BSPrim myPrim)
|
||||||
{
|
{
|
||||||
PhysicsScene = myScene;
|
PhysicsScene = myScene;
|
||||||
|
@ -575,11 +580,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
PhysicsScene.PE.SetMassProps(Prim.PhysBody, m_vehicleMass, localInertia);
|
PhysicsScene.PE.SetMassProps(Prim.PhysBody, m_vehicleMass, localInertia);
|
||||||
PhysicsScene.PE.UpdateInertiaTensor(Prim.PhysBody);
|
PhysicsScene.PE.UpdateInertiaTensor(Prim.PhysBody);
|
||||||
|
|
||||||
Vector3 grav = PhysicsScene.DefaultGravity * (1f - Prim.Buoyancy);
|
// Set the gravity for the vehicle depending on the buoyancy
|
||||||
|
// TODO: what should be done if prim and vehicle buoyancy differ?
|
||||||
|
Vector3 grav = Prim.ComputeGravity(m_VehicleBuoyancy);
|
||||||
PhysicsScene.PE.SetGravity(Prim.PhysBody, grav);
|
PhysicsScene.PE.SetGravity(Prim.PhysBody, grav);
|
||||||
|
|
||||||
VDetailLog("{0},BSDynamics.Refresh,mass={1},frict={2},inert={3},aDamp={4}",
|
VDetailLog("{0},BSDynamics.Refresh,mass={1},frict={2},inert={3},aDamp={4},grav={5}",
|
||||||
Prim.LocalID, m_vehicleMass, friction, localInertia, angularDamping);
|
Prim.LocalID, m_vehicleMass, friction, localInertia, angularDamping, grav);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -858,12 +865,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
linearMotorContribution *= VehicleOrientation;
|
linearMotorContribution *= VehicleOrientation;
|
||||||
// All the contributions after this are world relative (mostly Z modifications)
|
// All the contributions after this are world relative (mostly Z modifications)
|
||||||
|
|
||||||
// ==================================================================
|
|
||||||
// Buoyancy: force to overcome gravity.
|
|
||||||
// m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g;
|
|
||||||
// So, if zero, don't change anything (let gravity happen). If one, negate the effect of gravity.
|
|
||||||
Vector3 buoyancyContribution = Prim.PhysicsScene.DefaultGravity * m_VehicleBuoyancy;
|
|
||||||
|
|
||||||
Vector3 terrainHeightContribution = ComputeLinearTerrainHeightCorrection(pTimestep);
|
Vector3 terrainHeightContribution = ComputeLinearTerrainHeightCorrection(pTimestep);
|
||||||
|
|
||||||
Vector3 hoverContribution = ComputeLinearHover(pTimestep);
|
Vector3 hoverContribution = ComputeLinearHover(pTimestep);
|
||||||
|
@ -873,12 +874,15 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
Vector3 limitMotorUpContribution = ComputeLinearMotorUp(pTimestep);
|
Vector3 limitMotorUpContribution = ComputeLinearMotorUp(pTimestep);
|
||||||
|
|
||||||
// ==================================================================
|
// ==================================================================
|
||||||
|
// Select between velocities and forces. Forces will happen over time and
|
||||||
|
// will take into account inertia, collisions, etc. Velocities are
|
||||||
|
// raw updates to the velocity of the vehicle.
|
||||||
Vector3 newVelocity = linearMotorContribution
|
Vector3 newVelocity = linearMotorContribution
|
||||||
+ terrainHeightContribution
|
+ terrainHeightContribution
|
||||||
+ hoverContribution
|
+ hoverContribution
|
||||||
+ limitMotorUpContribution;
|
+ limitMotorUpContribution;
|
||||||
|
|
||||||
Vector3 newForce = buoyancyContribution;
|
Vector3 newForce = Vector3.Zero;
|
||||||
|
|
||||||
// If not changing some axis, reduce out velocity
|
// If not changing some axis, reduce out velocity
|
||||||
if ((m_flags & (VehicleFlag.NO_X)) != 0)
|
if ((m_flags & (VehicleFlag.NO_X)) != 0)
|
||||||
|
@ -902,6 +906,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// ==================================================================
|
// ==================================================================
|
||||||
// Stuff new linear velocity into the vehicle.
|
// Stuff new linear velocity into the vehicle.
|
||||||
// Since the velocity is just being set, it is not scaled by pTimeStep. Bullet will do that for us.
|
// Since the velocity is just being set, it is not scaled by pTimeStep. Bullet will do that for us.
|
||||||
|
// Also not scaled by mass since this is a super-physical setting of velocity.
|
||||||
VehicleVelocity = newVelocity;
|
VehicleVelocity = newVelocity;
|
||||||
|
|
||||||
// Other linear forces are applied as forces.
|
// Other linear forces are applied as forces.
|
||||||
|
@ -911,13 +916,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
VehicleAddForce(totalDownForce);
|
VehicleAddForce(totalDownForce);
|
||||||
}
|
}
|
||||||
|
|
||||||
VDetailLog("{0}, MoveLinear,done,newVel={1},totDown={2},IsColliding={3}",
|
VDetailLog("{0}, MoveLinear,done,linContrib={1},terrContrib={2},hoverContrib={3},limitContrib={4},totDown={5},isColl={6},newVel={7}",
|
||||||
Prim.LocalID, newVelocity, totalDownForce, Prim.IsColliding);
|
|
||||||
VDetailLog("{0}, MoveLinear,done,linContrib={1},terrContrib={2},hoverContrib={3},limitContrib={4},buoyContrib={5}",
|
|
||||||
Prim.LocalID,
|
Prim.LocalID,
|
||||||
linearMotorContribution, terrainHeightContribution, hoverContribution,
|
linearMotorContribution, terrainHeightContribution, hoverContribution, limitMotorUpContribution,
|
||||||
limitMotorUpContribution, buoyancyContribution
|
totalDownForce, Prim.IsColliding, newVelocity );
|
||||||
);
|
|
||||||
|
|
||||||
} // end MoveLinear()
|
} // end MoveLinear()
|
||||||
|
|
||||||
|
@ -1088,6 +1090,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// for preventing ground vehicles with large linear deflection, like bumper cars,
|
// for preventing ground vehicles with large linear deflection, like bumper cars,
|
||||||
// from climbing their linear deflection into the sky.
|
// from climbing their linear deflection into the sky.
|
||||||
// That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement
|
// That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement
|
||||||
|
// TODO: This is here because this is where ODE put it but documentation says it
|
||||||
|
// is a linear effect. Where should this check go?
|
||||||
if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0)
|
if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0)
|
||||||
{
|
{
|
||||||
angularMotorContribution.X = 0f;
|
angularMotorContribution.X = 0f;
|
||||||
|
@ -1179,7 +1183,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
Vector3 ret = Vector3.Zero;
|
Vector3 ret = Vector3.Zero;
|
||||||
|
|
||||||
// If vertical attaction timescale is reasonable
|
// If vertical attaction timescale is reasonable
|
||||||
if (m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
||||||
Vector3 verticalError = Vector3.UnitZ * VehicleOrientation;
|
Vector3 verticalError = Vector3.UnitZ * VehicleOrientation;
|
||||||
|
@ -1230,7 +1234,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// this creates an over-correction and then wabbling as the target is overshot.
|
// this creates an over-correction and then wabbling as the target is overshot.
|
||||||
// TODO: rethink how the different correction computations inter-relate.
|
// TODO: rethink how the different correction computations inter-relate.
|
||||||
|
|
||||||
if (m_angularDeflectionEfficiency != 0 && VehicleVelocity != Vector3.Zero)
|
if (enableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleVelocity != Vector3.Zero)
|
||||||
{
|
{
|
||||||
// The direction the vehicle is moving
|
// The direction the vehicle is moving
|
||||||
Vector3 movingDirection = VehicleVelocity;
|
Vector3 movingDirection = VehicleVelocity;
|
||||||
|
@ -1303,7 +1307,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
Vector3 ret = Vector3.Zero;
|
Vector3 ret = Vector3.Zero;
|
||||||
|
|
||||||
if (m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
// Rotate a UnitZ vector (pointing up) to how the vehicle is oriented.
|
// Rotate a UnitZ vector (pointing up) to how the vehicle is oriented.
|
||||||
// As the vehicle rolls to the right or left, the Y value will increase from
|
// As the vehicle rolls to the right or left, the Y value will increase from
|
||||||
|
|
|
@ -410,7 +410,7 @@ public sealed class BSPrim : BSPhysObject
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OMV.Vector3 grav = ComputeGravity();
|
OMV.Vector3 grav = ComputeGravity(Buoyancy);
|
||||||
|
|
||||||
if (inWorld)
|
if (inWorld)
|
||||||
{
|
{
|
||||||
|
@ -445,12 +445,12 @@ public sealed class BSPrim : BSPhysObject
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return what gravity should be set to this very moment
|
// Return what gravity should be set to this very moment
|
||||||
private OMV.Vector3 ComputeGravity()
|
public OMV.Vector3 ComputeGravity(float buoyancy)
|
||||||
{
|
{
|
||||||
OMV.Vector3 ret = PhysicsScene.DefaultGravity;
|
OMV.Vector3 ret = PhysicsScene.DefaultGravity;
|
||||||
|
|
||||||
if (!IsStatic)
|
if (!IsStatic)
|
||||||
ret *= (1f - Buoyancy);
|
ret *= (1f - buoyancy);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1561,21 +1561,6 @@ public sealed class BSPrim : BSPhysObject
|
||||||
|
|
||||||
// The physics engine says that properties have updated. Update same and inform
|
// The physics engine says that properties have updated. Update same and inform
|
||||||
// the world that things have changed.
|
// the world that things have changed.
|
||||||
// TODO: do we really need to check for changed? Maybe just copy values and call RequestPhysicsterseUpdate()
|
|
||||||
enum UpdatedProperties {
|
|
||||||
Position = 1 << 0,
|
|
||||||
Rotation = 1 << 1,
|
|
||||||
Velocity = 1 << 2,
|
|
||||||
Acceleration = 1 << 3,
|
|
||||||
RotationalVel = 1 << 4
|
|
||||||
}
|
|
||||||
|
|
||||||
const float ROTATION_TOLERANCE = 0.01f;
|
|
||||||
const float VELOCITY_TOLERANCE = 0.001f;
|
|
||||||
const float POSITION_TOLERANCE = 0.05f;
|
|
||||||
const float ACCELERATION_TOLERANCE = 0.01f;
|
|
||||||
const float ROTATIONAL_VELOCITY_TOLERANCE = 0.01f;
|
|
||||||
|
|
||||||
public override void UpdateProperties(EntityProperties entprop)
|
public override void UpdateProperties(EntityProperties entprop)
|
||||||
{
|
{
|
||||||
// Updates only for individual prims and for the root object of a linkset.
|
// Updates only for individual prims and for the root object of a linkset.
|
||||||
|
@ -1588,7 +1573,7 @@ public sealed class BSPrim : BSPhysObject
|
||||||
entprop.RotationalVelocity = OMV.Vector3.Zero;
|
entprop.RotationalVelocity = OMV.Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign directly to the local variables so the normal set action does not happen
|
// Assign directly to the local variables so the normal set actions do not happen
|
||||||
_position = entprop.Position;
|
_position = entprop.Position;
|
||||||
_orientation = entprop.Rotation;
|
_orientation = entprop.Rotation;
|
||||||
_velocity = entprop.Velocity;
|
_velocity = entprop.Velocity;
|
||||||
|
|
|
@ -486,6 +486,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
|
||||||
ProcessTaints();
|
ProcessTaints();
|
||||||
|
|
||||||
// Some of the physical objects requre individual, pre-step calls
|
// Some of the physical objects requre individual, pre-step calls
|
||||||
|
// (vehicles and avatar movement, in particular)
|
||||||
TriggerPreStepEvent(timeStep);
|
TriggerPreStepEvent(timeStep);
|
||||||
|
|
||||||
// the prestep actions might have added taints
|
// the prestep actions might have added taints
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
CURRENT PRIORITIES
|
CURRENT PRIORITIES
|
||||||
=================================================
|
=================================================
|
||||||
Avatars walking up stairs (HALF DONE)
|
Nebadon vehicles turning funny in arena
|
||||||
Vehicle movement on terrain smoothness
|
|
||||||
limitMotorUp calibration (more down?)
|
limitMotorUp calibration (more down?)
|
||||||
|
Vehicle angular vertical attraction
|
||||||
|
Vehicle angular deflection
|
||||||
Preferred orientation angular correction fix
|
Preferred orientation angular correction fix
|
||||||
|
vehicle angular banking
|
||||||
|
Avatars walking up stairs (HALF DONE)
|
||||||
|
Radius of the capsule affects ability to climb edges.
|
||||||
|
Vehicle movement on terrain smoothness
|
||||||
Surfboard go wonky when turning
|
Surfboard go wonky when turning
|
||||||
Angular motor direction is global coordinates rather than local coordinates?
|
Angular motor direction is global coordinates rather than local coordinates?
|
||||||
Boats float low in the water
|
Boats float low in the water (DONE)
|
||||||
Avatar movement
|
Avatar movement
|
||||||
flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE)
|
flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE)
|
||||||
walking up stairs is not calibrated correctly (stairs out of Kepler cabin)
|
walking up stairs is not calibrated correctly (stairs out of Kepler cabin)
|
||||||
|
@ -33,19 +38,15 @@ CRASHES
|
||||||
|
|
||||||
VEHICLES TODO LIST:
|
VEHICLES TODO LIST:
|
||||||
=================================================
|
=================================================
|
||||||
Angular motor direction is global coordinates rather than local coordinates
|
|
||||||
Border crossing with linked vehicle causes crash
|
Border crossing with linked vehicle causes crash
|
||||||
Vehicles (Move smoothly)
|
Vehicles (Move smoothly)
|
||||||
Add vehicle collisions so IsColliding is properly reported.
|
|
||||||
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
|
||||||
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.
|
||||||
Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
|
Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
|
||||||
Verify that angular motion specified around Z moves in the vehicle coordinates.
|
Verify that angular motion specified around Z moves in the vehicle coordinates.
|
||||||
Verify llGetVel() is returning a smooth and good value for vehicle movement.
|
Verify llGetVel() is returning a smooth and good value for vehicle movement.
|
||||||
|
@ -54,14 +55,13 @@ Implement function efficiency for lineaar and angular motion.
|
||||||
After getting off a vehicle, the root prim is phantom (can be walked through)
|
After getting off a vehicle, the root prim is phantom (can be walked through)
|
||||||
Need to force a position update for the root prim after compound shape destruction
|
Need to force a position update for the root prim after compound shape destruction
|
||||||
Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
|
Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
|
||||||
For limitMotorUp, use raycast down to find if vehicle is in the air.
|
|
||||||
Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties().
|
Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties().
|
||||||
A kludge that isn't fixing the real problem of Bullet adding extra motion.
|
A kludge that isn't fixing the real problem of Bullet adding extra motion.
|
||||||
Incorporate inter-relationship of angular corrections. For instance, angularDeflection
|
Incorporate inter-relationship of angular corrections. For instance, angularDeflection
|
||||||
and angularMotorUp will compute same X or Y correction. When added together
|
and angularMotorUp will compute same X or Y correction. When added together
|
||||||
creates over-correction and over-shoot and wabbling.
|
creates over-correction and over-shoot and wabbling.
|
||||||
|
|
||||||
BULLETSIM TODO LIST:
|
GENERAL TODO LIST:
|
||||||
=================================================
|
=================================================
|
||||||
Implement an avatar mesh shape. The Bullet capsule is way too limited.
|
Implement an avatar mesh shape. The Bullet capsule is way too limited.
|
||||||
Consider just hand creating a vertex/index array in a new BSShapeAvatar.
|
Consider just hand creating a vertex/index array in a new BSShapeAvatar.
|
||||||
|
@ -121,11 +121,9 @@ LinksetCompound: when one of the children changes orientation (like tires
|
||||||
Verify/think through scripts in children of linksets. What do they reference
|
Verify/think through scripts in children of linksets. What do they reference
|
||||||
and return when getting position, velocity, ...
|
and return when getting position, velocity, ...
|
||||||
Confirm constraint linksets still work after making all the changes for compound linksets.
|
Confirm constraint linksets still work after making all the changes for compound linksets.
|
||||||
|
Use PostTaint callback to do rebuilds for constraint linksets to reduce rebuilding
|
||||||
Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt.
|
Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt.
|
||||||
For compound linksets, add ability to remove or reposition individual child shapes.
|
For compound linksets, add ability to remove or reposition individual child shapes.
|
||||||
Disable activity of passive linkset children.
|
|
||||||
Since the linkset is a compound object, the old prims are left lying
|
|
||||||
around and need to be phantomized so they don't collide, ...
|
|
||||||
Speed up creation of large physical linksets
|
Speed up creation of large physical linksets
|
||||||
For instance, sitting in Neb's car (130 prims) takes several seconds to become physical.
|
For instance, sitting in Neb's car (130 prims) takes several seconds to become physical.
|
||||||
REALLY bad for very large physical linksets (freezes the sim for many seconds).
|
REALLY bad for very large physical linksets (freezes the sim for many seconds).
|
||||||
|
@ -138,25 +136,21 @@ MORE
|
||||||
Use the HACD convex hull routine in Bullet rather than the C# version.
|
Use the HACD convex hull routine in Bullet rather than the C# version.
|
||||||
Do we need to do convex hulls all the time? Can complex meshes be left meshes?
|
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
|
||||||
Test avatar walking up stairs. How does compare with SL.
|
Hulls are not as detailed as meshes. Hulled vehicles insides are different shape.
|
||||||
Radius of the capsule affects ability to climb edges.
|
|
||||||
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.
|
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
|
||||||
http://wiki.secondlife.com/wiki/File:Avmeshforms.png
|
http://wiki.secondlife.com/wiki/File:Avmeshforms.png
|
||||||
|
|
||||||
Performance test with lots of avatars. Can BulletSim support a thousand?
|
Performance test with lots of avatars. Can BulletSim support a thousand?
|
||||||
Optimize collisions in C++: only send up to the object subscribed to collisions.
|
Optimize collisions in C++: only send up to the object subscribed to collisions.
|
||||||
Use collision subscription and remove the collsion(A,B) and collision(B,A)
|
Use collision subscription and remove the collsion(A,B) and collision(B,A)
|
||||||
Check whether SimMotionState needs large if statement (see TODO).
|
Check whether SimMotionState needs large if statement (see TODO).
|
||||||
|
|
||||||
Implement 'top colliders' info.
|
Implement 'top colliders' info.
|
||||||
Avatar jump
|
Avatar jump
|
||||||
Performance measurement and changes to make quicker.
|
Performance measurement and changes to make quicker.
|
||||||
Implement detailed physics stats (GetStats()).
|
Implement detailed physics stats (GetStats()).
|
||||||
|
|
||||||
Measure performance improvement from hulls
|
Measure performance improvement from hulls
|
||||||
Test not using ghost objects for volume detect implementation.
|
Test not using ghost objects for volume detect implementation.
|
||||||
Performance of closures and delegates for taint processing
|
Performance of closures and delegates for taint processing
|
||||||
|
@ -164,9 +158,7 @@ Performance of closures and delegates for taint processing
|
||||||
Is any slowdown introduced by the existing implementation significant?
|
Is any slowdown introduced by the existing implementation significant?
|
||||||
Is there are more efficient method of implementing pre and post step actions?
|
Is there are more efficient method of implementing pre and post step actions?
|
||||||
See http://www.codeproject.com/Articles/29922/Weak-Events-in-C
|
See http://www.codeproject.com/Articles/29922/Weak-Events-in-C
|
||||||
|
|
||||||
Physics Arena central pyramid: why is one side permiable?
|
Physics Arena central pyramid: why is one side permiable?
|
||||||
|
|
||||||
In SL, perfect spheres don't seem to have rolling friction. Add special case.
|
In SL, perfect spheres don't seem to have rolling friction. Add special case.
|
||||||
Enforce physical parameter min/max:
|
Enforce physical parameter min/max:
|
||||||
Gravity: [-1, 28]
|
Gravity: [-1, 28]
|
||||||
|
@ -197,22 +189,19 @@ Generalize Dynamics and PID with standardized motors.
|
||||||
Generalize Linkset and vehicles into PropertyManagers
|
Generalize Linkset and vehicles into PropertyManagers
|
||||||
Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
|
Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
|
||||||
Potentially add events for shape destruction, etc.
|
Potentially add events for shape destruction, etc.
|
||||||
Complete implemention of preStepActions
|
Better mechanism for resetting linkset set and vehicle parameters when body rebuilt.
|
||||||
Replace vehicle step call with prestep event.
|
BSPrim.CreateGeomAndObject is kludgy with the callbacks, etc.
|
||||||
Is there a need for postStepActions? postStepTaints?
|
|
||||||
Implement linkset by setting position of children when root updated. (LinksetManual)
|
Implement linkset by setting position of children when root updated. (LinksetManual)
|
||||||
Linkset implementation using manual prim movement.
|
Linkset implementation using manual prim movement.
|
||||||
LinkablePrim class? Would that simplify/centralize the linkset logic?
|
LinkablePrim class? Would that simplify/centralize the linkset logic?
|
||||||
BSScene.UpdateParameterSet() is broken. How to set params on objects?
|
BSScene.UpdateParameterSet() is broken. How to set params on objects?
|
||||||
Remove HeightmapInfo from terrain specification
|
|
||||||
Since C++ code does not need terrain height, this structure et al are not needed.
|
|
||||||
Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will
|
Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will
|
||||||
bob at the water level. BSPrim.PositionSanityCheck().
|
bob at the water level. BSPrim.PositionSanityCheck()
|
||||||
Should taints check for existance or activeness of target?
|
Should taints check for existance or activeness of target?
|
||||||
When destroying linksets/etc, taints can be generated for objects that are
|
When destroying linksets/etc, taints can be generated for objects that are
|
||||||
actually gone when the taint happens. Crashes don't happen because the taint closure
|
actually gone when the taint happens. Crashes don't happen because the taint closure
|
||||||
keeps the object from being freed, but that is just an accident.
|
keeps the object from being freed, but that is just an accident.
|
||||||
Possibly have and 'active' flag that is checked by the taint processor?
|
Possibly have an 'active' flag that is checked by the taint processor?
|
||||||
Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones)
|
Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones)
|
||||||
Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'?
|
Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'?
|
||||||
There are TOO MANY interfaces from BulletSim core to Bullet itself
|
There are TOO MANY interfaces from BulletSim core to Bullet itself
|
||||||
|
@ -282,3 +271,18 @@ Redo BulletSimAPI to allow native C# implementation of Bullet option (DONE)
|
||||||
Meshes rendering as bounding boxes (DONE)
|
Meshes rendering as bounding boxes (DONE)
|
||||||
(Resolution: Added test for mesh/sculpties in native shapes so it didn't think it was a box)
|
(Resolution: Added test for mesh/sculpties in native shapes so it didn't think it was a box)
|
||||||
llMoveToTarget (Resolution: added simple motor to update the position.)
|
llMoveToTarget (Resolution: added simple motor to update the position.)
|
||||||
|
Angular motor direction is global coordinates rather than local coordinates (DONE)
|
||||||
|
Add vehicle collisions so IsColliding is properly reported. (DONE)
|
||||||
|
Needed for banking, limitMotorUp, movementLimiting, ...
|
||||||
|
(Resolution: added CollisionFlags.BS_VEHICLE_COLLISION and code to use it)
|
||||||
|
VehicleAddForce is not scaled by the simulation step but it is only
|
||||||
|
applied for one step. Should it be scaled? (DONE)
|
||||||
|
(Resolution: use force for timed things, Impulse for immediate, non-timed things)
|
||||||
|
Complete implemention of preStepActions (DONE)
|
||||||
|
Replace vehicle step call with prestep event.
|
||||||
|
Is there a need for postStepActions? postStepTaints?
|
||||||
|
Disable activity of passive linkset children. (DONE)
|
||||||
|
Since the linkset is a compound object, the old prims are left lying
|
||||||
|
around and need to be phantomized so they don't collide, ...
|
||||||
|
Remove HeightmapInfo from terrain specification (DONE)
|
||||||
|
Since C++ code does not need terrain height, this structure et al are not needed.
|
Loading…
Reference in New Issue