aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorRobert Adams2013-01-09 11:06:49 -0800
committerRobert Adams2013-01-11 16:46:38 -0800
commit98168edc29c7c761121e453d82bf1fab52814b58 (patch)
tree6bc2841797c64b34ffde221345ff6b7f9acb7c7a /OpenSim
parentBulletSim: fix the 'No recognised physics mesh found ...' error spew by remem... (diff)
downloadopensim-SC_OLD-98168edc29c7c761121e453d82bf1fab52814b58.zip
opensim-SC_OLD-98168edc29c7c761121e453d82bf1fab52814b58.tar.gz
opensim-SC_OLD-98168edc29c7c761121e453d82bf1fab52814b58.tar.bz2
opensim-SC_OLD-98168edc29c7c761121e453d82bf1fab52814b58.tar.xz
BulletSim: remove double application of buoyancy. Centralize computation of buoyancy. Add motor angular debugging controls.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs42
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs23
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs1
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt58
4 files changed, 59 insertions, 65 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index c34c05a..47f2759 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -124,6 +124,11 @@ namespace OpenSim.Region.Physics.BulletSPlugin
124 static readonly float PIOverFour = ((float)Math.PI) / 4f; 124 static readonly float PIOverFour = ((float)Math.PI) / 4f;
125 static readonly float PIOverTwo = ((float)Math.PI) / 2f; 125 static readonly float PIOverTwo = ((float)Math.PI) / 2f;
126 126
127 // For debugging, flags to turn on and off individual corrections.
128 private bool enableAngularVerticalAttraction = true;
129 private bool enableAngularDeflection = true;
130 private bool enableAngularBanking = true;
131
127 public BSDynamics(BSScene myScene, BSPrim myPrim) 132 public BSDynamics(BSScene myScene, BSPrim myPrim)
128 { 133 {
129 PhysicsScene = myScene; 134 PhysicsScene = myScene;
@@ -575,11 +580,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
575 PhysicsScene.PE.SetMassProps(Prim.PhysBody, m_vehicleMass, localInertia); 580 PhysicsScene.PE.SetMassProps(Prim.PhysBody, m_vehicleMass, localInertia);
576 PhysicsScene.PE.UpdateInertiaTensor(Prim.PhysBody); 581 PhysicsScene.PE.UpdateInertiaTensor(Prim.PhysBody);
577 582
578 Vector3 grav = PhysicsScene.DefaultGravity * (1f - Prim.Buoyancy); 583 // Set the gravity for the vehicle depending on the buoyancy
584 // TODO: what should be done if prim and vehicle buoyancy differ?
585 Vector3 grav = Prim.ComputeGravity(m_VehicleBuoyancy);
579 PhysicsScene.PE.SetGravity(Prim.PhysBody, grav); 586 PhysicsScene.PE.SetGravity(Prim.PhysBody, grav);
580 587
581 VDetailLog("{0},BSDynamics.Refresh,mass={1},frict={2},inert={3},aDamp={4}", 588 VDetailLog("{0},BSDynamics.Refresh,mass={1},frict={2},inert={3},aDamp={4},grav={5}",
582 Prim.LocalID, m_vehicleMass, friction, localInertia, angularDamping); 589 Prim.LocalID, m_vehicleMass, friction, localInertia, angularDamping, grav);
583 } 590 }
584 else 591 else
585 { 592 {
@@ -858,12 +865,6 @@ namespace OpenSim.Region.Physics.BulletSPlugin
858 linearMotorContribution *= VehicleOrientation; 865 linearMotorContribution *= VehicleOrientation;
859 // All the contributions after this are world relative (mostly Z modifications) 866 // All the contributions after this are world relative (mostly Z modifications)
860 867
861 // ==================================================================
862 // Buoyancy: force to overcome gravity.
863 // m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g;
864 // So, if zero, don't change anything (let gravity happen). If one, negate the effect of gravity.
865 Vector3 buoyancyContribution = Prim.PhysicsScene.DefaultGravity * m_VehicleBuoyancy;
866
867 Vector3 terrainHeightContribution = ComputeLinearTerrainHeightCorrection(pTimestep); 868 Vector3 terrainHeightContribution = ComputeLinearTerrainHeightCorrection(pTimestep);
868 869
869 Vector3 hoverContribution = ComputeLinearHover(pTimestep); 870 Vector3 hoverContribution = ComputeLinearHover(pTimestep);
@@ -873,12 +874,15 @@ namespace OpenSim.Region.Physics.BulletSPlugin
873 Vector3 limitMotorUpContribution = ComputeLinearMotorUp(pTimestep); 874 Vector3 limitMotorUpContribution = ComputeLinearMotorUp(pTimestep);
874 875
875 // ================================================================== 876 // ==================================================================
877 // Select between velocities and forces. Forces will happen over time and
878 // will take into account inertia, collisions, etc. Velocities are
879 // raw updates to the velocity of the vehicle.
876 Vector3 newVelocity = linearMotorContribution 880 Vector3 newVelocity = linearMotorContribution
877 + terrainHeightContribution 881 + terrainHeightContribution
878 + hoverContribution 882 + hoverContribution
879 + limitMotorUpContribution; 883 + limitMotorUpContribution;
880 884
881 Vector3 newForce = buoyancyContribution; 885 Vector3 newForce = Vector3.Zero;
882 886
883 // If not changing some axis, reduce out velocity 887 // If not changing some axis, reduce out velocity
884 if ((m_flags & (VehicleFlag.NO_X)) != 0) 888 if ((m_flags & (VehicleFlag.NO_X)) != 0)
@@ -902,6 +906,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
902 // ================================================================== 906 // ==================================================================
903 // Stuff new linear velocity into the vehicle. 907 // Stuff new linear velocity into the vehicle.
904 // Since the velocity is just being set, it is not scaled by pTimeStep. Bullet will do that for us. 908 // Since the velocity is just being set, it is not scaled by pTimeStep. Bullet will do that for us.
909 // Also not scaled by mass since this is a super-physical setting of velocity.
905 VehicleVelocity = newVelocity; 910 VehicleVelocity = newVelocity;
906 911
907 // Other linear forces are applied as forces. 912 // Other linear forces are applied as forces.
@@ -911,13 +916,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
911 VehicleAddForce(totalDownForce); 916 VehicleAddForce(totalDownForce);
912 } 917 }
913 918
914 VDetailLog("{0}, MoveLinear,done,newVel={1},totDown={2},IsColliding={3}", 919 VDetailLog("{0}, MoveLinear,done,linContrib={1},terrContrib={2},hoverContrib={3},limitContrib={4},totDown={5},isColl={6},newVel={7}",
915 Prim.LocalID, newVelocity, totalDownForce, Prim.IsColliding);
916 VDetailLog("{0}, MoveLinear,done,linContrib={1},terrContrib={2},hoverContrib={3},limitContrib={4},buoyContrib={5}",
917 Prim.LocalID, 920 Prim.LocalID,
918 linearMotorContribution, terrainHeightContribution, hoverContribution, 921 linearMotorContribution, terrainHeightContribution, hoverContribution, limitMotorUpContribution,
919 limitMotorUpContribution, buoyancyContribution 922 totalDownForce, Prim.IsColliding, newVelocity );
920 );
921 923
922 } // end MoveLinear() 924 } // end MoveLinear()
923 925
@@ -1088,6 +1090,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1088 // for preventing ground vehicles with large linear deflection, like bumper cars, 1090 // for preventing ground vehicles with large linear deflection, like bumper cars,
1089 // from climbing their linear deflection into the sky. 1091 // from climbing their linear deflection into the sky.
1090 // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement 1092 // That is, NO_DEFLECTION_UP says angular motion should not add any pitch or roll movement
1093 // TODO: This is here because this is where ODE put it but documentation says it
1094 // is a linear effect. Where should this check go?
1091 if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0) 1095 if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0)
1092 { 1096 {
1093 angularMotorContribution.X = 0f; 1097 angularMotorContribution.X = 0f;
@@ -1179,7 +1183,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1179 Vector3 ret = Vector3.Zero; 1183 Vector3 ret = Vector3.Zero;
1180 1184
1181 // If vertical attaction timescale is reasonable 1185 // If vertical attaction timescale is reasonable
1182 if (m_verticalAttractionTimescale < m_verticalAttractionCutoff) 1186 if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
1183 { 1187 {
1184 // Take a vector pointing up and convert it from world to vehicle relative coords. 1188 // Take a vector pointing up and convert it from world to vehicle relative coords.
1185 Vector3 verticalError = Vector3.UnitZ * VehicleOrientation; 1189 Vector3 verticalError = Vector3.UnitZ * VehicleOrientation;
@@ -1230,7 +1234,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1230 // this creates an over-correction and then wabbling as the target is overshot. 1234 // this creates an over-correction and then wabbling as the target is overshot.
1231 // TODO: rethink how the different correction computations inter-relate. 1235 // TODO: rethink how the different correction computations inter-relate.
1232 1236
1233 if (m_angularDeflectionEfficiency != 0 && VehicleVelocity != Vector3.Zero) 1237 if (enableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleVelocity != Vector3.Zero)
1234 { 1238 {
1235 // The direction the vehicle is moving 1239 // The direction the vehicle is moving
1236 Vector3 movingDirection = VehicleVelocity; 1240 Vector3 movingDirection = VehicleVelocity;
@@ -1303,7 +1307,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1303 { 1307 {
1304 Vector3 ret = Vector3.Zero; 1308 Vector3 ret = Vector3.Zero;
1305 1309
1306 if (m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff) 1310 if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
1307 { 1311 {
1308 // Rotate a UnitZ vector (pointing up) to how the vehicle is oriented. 1312 // Rotate a UnitZ vector (pointing up) to how the vehicle is oriented.
1309 // As the vehicle rolls to the right or left, the Y value will increase from 1313 // As the vehicle rolls to the right or left, the Y value will increase from
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 8fd054f..50ba343 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -410,7 +410,7 @@ public sealed class BSPrim : BSPhysObject
410 } 410 }
411 else 411 else
412 { 412 {
413 OMV.Vector3 grav = ComputeGravity(); 413 OMV.Vector3 grav = ComputeGravity(Buoyancy);
414 414
415 if (inWorld) 415 if (inWorld)
416 { 416 {
@@ -445,12 +445,12 @@ public sealed class BSPrim : BSPhysObject
445 } 445 }
446 446
447 // Return what gravity should be set to this very moment 447 // Return what gravity should be set to this very moment
448 private OMV.Vector3 ComputeGravity() 448 public OMV.Vector3 ComputeGravity(float buoyancy)
449 { 449 {
450 OMV.Vector3 ret = PhysicsScene.DefaultGravity; 450 OMV.Vector3 ret = PhysicsScene.DefaultGravity;
451 451
452 if (!IsStatic) 452 if (!IsStatic)
453 ret *= (1f - Buoyancy); 453 ret *= (1f - buoyancy);
454 454
455 return ret; 455 return ret;
456 } 456 }
@@ -1561,21 +1561,6 @@ public sealed class BSPrim : BSPhysObject
1561 1561
1562 // The physics engine says that properties have updated. Update same and inform 1562 // The physics engine says that properties have updated. Update same and inform
1563 // the world that things have changed. 1563 // the world that things have changed.
1564 // TODO: do we really need to check for changed? Maybe just copy values and call RequestPhysicsterseUpdate()
1565 enum UpdatedProperties {
1566 Position = 1 << 0,
1567 Rotation = 1 << 1,
1568 Velocity = 1 << 2,
1569 Acceleration = 1 << 3,
1570 RotationalVel = 1 << 4
1571 }
1572
1573 const float ROTATION_TOLERANCE = 0.01f;
1574 const float VELOCITY_TOLERANCE = 0.001f;
1575 const float POSITION_TOLERANCE = 0.05f;
1576 const float ACCELERATION_TOLERANCE = 0.01f;
1577 const float ROTATIONAL_VELOCITY_TOLERANCE = 0.01f;
1578
1579 public override void UpdateProperties(EntityProperties entprop) 1564 public override void UpdateProperties(EntityProperties entprop)
1580 { 1565 {
1581 // Updates only for individual prims and for the root object of a linkset. 1566 // Updates only for individual prims and for the root object of a linkset.
@@ -1588,7 +1573,7 @@ public sealed class BSPrim : BSPhysObject
1588 entprop.RotationalVelocity = OMV.Vector3.Zero; 1573 entprop.RotationalVelocity = OMV.Vector3.Zero;
1589 } 1574 }
1590 1575
1591 // Assign directly to the local variables so the normal set action does not happen 1576 // Assign directly to the local variables so the normal set actions do not happen
1592 _position = entprop.Position; 1577 _position = entprop.Position;
1593 _orientation = entprop.Rotation; 1578 _orientation = entprop.Rotation;
1594 _velocity = entprop.Velocity; 1579 _velocity = entprop.Velocity;
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 7017194..4a6cebd 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -486,6 +486,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
486 ProcessTaints(); 486 ProcessTaints();
487 487
488 // Some of the physical objects requre individual, pre-step calls 488 // Some of the physical objects requre individual, pre-step calls
489 // (vehicles and avatar movement, in particular)
489 TriggerPreStepEvent(timeStep); 490 TriggerPreStepEvent(timeStep);
490 491
491 // the prestep actions might have added taints 492 // the prestep actions might have added taints
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
index 29bd4e4..1540dbb 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
@@ -1,12 +1,17 @@
1CURRENT PRIORITIES 1CURRENT PRIORITIES
2================================================= 2=================================================
3Nebadon vehicles turning funny in arena
4limitMotorUp calibration (more down?)
5Vehicle angular vertical attraction
6Vehicle angular deflection
7 Preferred orientation angular correction fix
8vehicle angular banking
3Avatars walking up stairs (HALF DONE) 9Avatars walking up stairs (HALF DONE)
10 Radius of the capsule affects ability to climb edges.
4Vehicle movement on terrain smoothness 11Vehicle movement on terrain smoothness
5limitMotorUp calibration (more down?)
6Preferred orientation angular correction fix
7Surfboard go wonky when turning 12Surfboard go wonky when turning
8 Angular motor direction is global coordinates rather than local coordinates? 13 Angular motor direction is global coordinates rather than local coordinates?
9Boats float low in the water 14Boats float low in the water (DONE)
10Avatar movement 15Avatar movement
11 flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE) 16 flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE)
12 walking up stairs is not calibrated correctly (stairs out of Kepler cabin) 17 walking up stairs is not calibrated correctly (stairs out of Kepler cabin)
@@ -33,19 +38,15 @@ CRASHES
33 38
34VEHICLES TODO LIST: 39VEHICLES TODO LIST:
35================================================= 40=================================================
36Angular motor direction is global coordinates rather than local coordinates
37Border crossing with linked vehicle causes crash 41Border crossing with linked vehicle causes crash
38Vehicles (Move smoothly) 42Vehicles (Move smoothly)
39Add vehicle collisions so IsColliding is properly reported.
40 Needed for banking, limitMotorUp, movementLimiting, ...
41VehicleAddForce is not scaled by the simulation step but it is only
42 applied for one step. Should it be scaled?
43Some vehicles should not be able to turn if no speed or off ground. 43Some vehicles should not be able to turn if no speed or off ground.
44Cannot edit/move a vehicle being ridden: it jumps back to the origional position. 44Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
45Neb car jiggling left and right 45Neb car jiggling left and right
46 Happens on terrain and any other mesh object. Flat cubes are much smoother. 46 Happens on terrain and any other mesh object. Flat cubes are much smoother.
47 This has been reduced but not eliminated. 47 This has been reduced but not eliminated.
48Implement referenceFrame for all the motion routines. 48Implement referenceFrame for all the motion routines.
49For limitMotorUp, use raycast down to find if vehicle is in the air.
49Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE. 50Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
50 Verify that angular motion specified around Z moves in the vehicle coordinates. 51 Verify that angular motion specified around Z moves in the vehicle coordinates.
51Verify llGetVel() is returning a smooth and good value for vehicle movement. 52Verify llGetVel() is returning a smooth and good value for vehicle movement.
@@ -54,14 +55,13 @@ Implement function efficiency for lineaar and angular motion.
54After getting off a vehicle, the root prim is phantom (can be walked through) 55After getting off a vehicle, the root prim is phantom (can be walked through)
55 Need to force a position update for the root prim after compound shape destruction 56 Need to force a position update for the root prim after compound shape destruction
56Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint) 57Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint)
57For limitMotorUp, use raycast down to find if vehicle is in the air.
58Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties(). 58Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties().
59 A kludge that isn't fixing the real problem of Bullet adding extra motion. 59 A kludge that isn't fixing the real problem of Bullet adding extra motion.
60Incorporate inter-relationship of angular corrections. For instance, angularDeflection 60Incorporate inter-relationship of angular corrections. For instance, angularDeflection
61 and angularMotorUp will compute same X or Y correction. When added together 61 and angularMotorUp will compute same X or Y correction. When added together
62 creates over-correction and over-shoot and wabbling. 62 creates over-correction and over-shoot and wabbling.
63 63
64BULLETSIM TODO LIST: 64GENERAL TODO LIST:
65================================================= 65=================================================
66Implement an avatar mesh shape. The Bullet capsule is way too limited. 66Implement an avatar mesh shape. The Bullet capsule is way too limited.
67 Consider just hand creating a vertex/index array in a new BSShapeAvatar. 67 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
121Verify/think through scripts in children of linksets. What do they reference 121Verify/think through scripts in children of linksets. What do they reference
122 and return when getting position, velocity, ... 122 and return when getting position, velocity, ...
123Confirm constraint linksets still work after making all the changes for compound linksets. 123Confirm constraint linksets still work after making all the changes for compound linksets.
124Use PostTaint callback to do rebuilds for constraint linksets to reduce rebuilding
124Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt. 125Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt.
125 For compound linksets, add ability to remove or reposition individual child shapes. 126 For compound linksets, add ability to remove or reposition individual child shapes.
126Disable activity of passive linkset children.
127 Since the linkset is a compound object, the old prims are left lying
128 around and need to be phantomized so they don't collide, ...
129Speed up creation of large physical linksets 127Speed up creation of large physical linksets
130 For instance, sitting in Neb's car (130 prims) takes several seconds to become physical. 128 For instance, sitting in Neb's car (130 prims) takes several seconds to become physical.
131 REALLY bad for very large physical linksets (freezes the sim for many seconds). 129 REALLY bad for very large physical linksets (freezes the sim for many seconds).
@@ -138,25 +136,21 @@ MORE
138Use the HACD convex hull routine in Bullet rather than the C# version. 136Use the HACD convex hull routine in Bullet rather than the C# version.
139Do we need to do convex hulls all the time? Can complex meshes be left meshes? 137Do we need to do convex hulls all the time? Can complex meshes be left meshes?
140 There is some problem with meshes and collisions 138 There is some problem with meshes and collisions
141Test avatar walking up stairs. How does compare with SL. 139 Hulls are not as detailed as meshes. Hulled vehicles insides are different shape.
142 Radius of the capsule affects ability to climb edges.
143Debounce avatar contact so legs don't keep folding up when standing. 140Debounce avatar contact so legs don't keep folding up when standing.
144Implement LSL physics controls. Like STATUS_ROTATE_X. 141Implement LSL physics controls. Like STATUS_ROTATE_X.
145Add border extensions to terrain to help region crossings and objects leaving region. 142Add border extensions to terrain to help region crossings and objects leaving region.
146Use a different capsule shape for avatar when sitting 143Use a different capsule shape for avatar when sitting
147 LL uses a pyrimidal shape scaled by the avatar's bounding box 144 LL uses a pyrimidal shape scaled by the avatar's bounding box
148 http://wiki.secondlife.com/wiki/File:Avmeshforms.png 145 http://wiki.secondlife.com/wiki/File:Avmeshforms.png
149
150Performance test with lots of avatars. Can BulletSim support a thousand? 146Performance test with lots of avatars. Can BulletSim support a thousand?
151Optimize collisions in C++: only send up to the object subscribed to collisions. 147Optimize collisions in C++: only send up to the object subscribed to collisions.
152 Use collision subscription and remove the collsion(A,B) and collision(B,A) 148 Use collision subscription and remove the collsion(A,B) and collision(B,A)
153Check whether SimMotionState needs large if statement (see TODO). 149Check whether SimMotionState needs large if statement (see TODO).
154
155Implement 'top colliders' info. 150Implement 'top colliders' info.
156Avatar jump 151Avatar jump
157Performance measurement and changes to make quicker. 152Performance measurement and changes to make quicker.
158Implement detailed physics stats (GetStats()). 153Implement detailed physics stats (GetStats()).
159
160Measure performance improvement from hulls 154Measure performance improvement from hulls
161Test not using ghost objects for volume detect implementation. 155Test not using ghost objects for volume detect implementation.
162Performance of closures and delegates for taint processing 156Performance of closures and delegates for taint processing
@@ -164,9 +158,7 @@ Performance of closures and delegates for taint processing
164 Is any slowdown introduced by the existing implementation significant? 158 Is any slowdown introduced by the existing implementation significant?
165Is there are more efficient method of implementing pre and post step actions? 159Is there are more efficient method of implementing pre and post step actions?
166 See http://www.codeproject.com/Articles/29922/Weak-Events-in-C 160 See http://www.codeproject.com/Articles/29922/Weak-Events-in-C
167
168Physics Arena central pyramid: why is one side permiable? 161Physics Arena central pyramid: why is one side permiable?
169
170In SL, perfect spheres don't seem to have rolling friction. Add special case. 162In SL, perfect spheres don't seem to have rolling friction. Add special case.
171Enforce physical parameter min/max: 163Enforce physical parameter min/max:
172 Gravity: [-1, 28] 164 Gravity: [-1, 28]
@@ -197,22 +189,19 @@ Generalize Dynamics and PID with standardized motors.
197Generalize Linkset and vehicles into PropertyManagers 189Generalize Linkset and vehicles into PropertyManagers
198 Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies 190 Methods for Refresh, RemoveBodyDependencies, RestoreBodyDependencies
199 Potentially add events for shape destruction, etc. 191 Potentially add events for shape destruction, etc.
200Complete implemention of preStepActions 192Better mechanism for resetting linkset set and vehicle parameters when body rebuilt.
201 Replace vehicle step call with prestep event. 193 BSPrim.CreateGeomAndObject is kludgy with the callbacks, etc.
202 Is there a need for postStepActions? postStepTaints?
203Implement linkset by setting position of children when root updated. (LinksetManual) 194Implement linkset by setting position of children when root updated. (LinksetManual)
204 Linkset implementation using manual prim movement. 195 Linkset implementation using manual prim movement.
205LinkablePrim class? Would that simplify/centralize the linkset logic? 196LinkablePrim class? Would that simplify/centralize the linkset logic?
206BSScene.UpdateParameterSet() is broken. How to set params on objects? 197BSScene.UpdateParameterSet() is broken. How to set params on objects?
207Remove HeightmapInfo from terrain specification
208 Since C++ code does not need terrain height, this structure et al are not needed.
209Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will 198Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will
210 bob at the water level. BSPrim.PositionSanityCheck(). 199 bob at the water level. BSPrim.PositionSanityCheck()
211Should taints check for existance or activeness of target? 200Should taints check for existance or activeness of target?
212 When destroying linksets/etc, taints can be generated for objects that are 201 When destroying linksets/etc, taints can be generated for objects that are
213 actually gone when the taint happens. Crashes don't happen because the taint closure 202 actually gone when the taint happens. Crashes don't happen because the taint closure
214 keeps the object from being freed, but that is just an accident. 203 keeps the object from being freed, but that is just an accident.
215 Possibly have and 'active' flag that is checked by the taint processor? 204 Possibly have an 'active' flag that is checked by the taint processor?
216Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones) 205Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones)
217Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'? 206Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'?
218There are TOO MANY interfaces from BulletSim core to Bullet itself 207There 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)
282Meshes rendering as bounding boxes (DONE) 271Meshes rendering as bounding boxes (DONE)
283 (Resolution: Added test for mesh/sculpties in native shapes so it didn't think it was a box) 272 (Resolution: Added test for mesh/sculpties in native shapes so it didn't think it was a box)
284llMoveToTarget (Resolution: added simple motor to update the position.) 273llMoveToTarget (Resolution: added simple motor to update the position.)
274Angular motor direction is global coordinates rather than local coordinates (DONE)
275Add vehicle collisions so IsColliding is properly reported. (DONE)
276 Needed for banking, limitMotorUp, movementLimiting, ...
277 (Resolution: added CollisionFlags.BS_VEHICLE_COLLISION and code to use it)
278VehicleAddForce is not scaled by the simulation step but it is only
279 applied for one step. Should it be scaled? (DONE)
280 (Resolution: use force for timed things, Impulse for immediate, non-timed things)
281Complete implemention of preStepActions (DONE)
282 Replace vehicle step call with prestep event.
283 Is there a need for postStepActions? postStepTaints?
284Disable activity of passive linkset children. (DONE)
285 Since the linkset is a compound object, the old prims are left lying
286 around and need to be phantomized so they don't collide, ...
287Remove HeightmapInfo from terrain specification (DONE)
288 Since C++ code does not need terrain height, this structure et al are not needed. \ No newline at end of file