diff options
author | Robert Adams | 2013-01-09 11:06:49 -0800 |
---|---|---|
committer | Robert Adams | 2013-01-11 16:46:38 -0800 |
commit | 98168edc29c7c761121e453d82bf1fab52814b58 (patch) | |
tree | 6bc2841797c64b34ffde221345ff6b7f9acb7c7a | |
parent | BulletSim: fix the 'No recognised physics mesh found ...' error spew by remem... (diff) | |
download | opensim-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.
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 42 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 23 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 1 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt | 58 |
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 @@ | |||
1 | CURRENT PRIORITIES | 1 | CURRENT PRIORITIES |
2 | ================================================= | 2 | ================================================= |
3 | Nebadon vehicles turning funny in arena | ||
4 | limitMotorUp calibration (more down?) | ||
5 | Vehicle angular vertical attraction | ||
6 | Vehicle angular deflection | ||
7 | Preferred orientation angular correction fix | ||
8 | vehicle angular banking | ||
3 | Avatars walking up stairs (HALF DONE) | 9 | Avatars walking up stairs (HALF DONE) |
10 | Radius of the capsule affects ability to climb edges. | ||
4 | Vehicle movement on terrain smoothness | 11 | Vehicle movement on terrain smoothness |
5 | limitMotorUp calibration (more down?) | ||
6 | Preferred orientation angular correction fix | ||
7 | Surfboard go wonky when turning | 12 | Surfboard 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? |
9 | Boats float low in the water | 14 | Boats float low in the water (DONE) |
10 | Avatar movement | 15 | Avatar 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 | ||
34 | VEHICLES TODO LIST: | 39 | VEHICLES TODO LIST: |
35 | ================================================= | 40 | ================================================= |
36 | Angular motor direction is global coordinates rather than local coordinates | ||
37 | Border crossing with linked vehicle causes crash | 41 | Border crossing with linked vehicle causes crash |
38 | Vehicles (Move smoothly) | 42 | Vehicles (Move smoothly) |
39 | Add vehicle collisions so IsColliding is properly reported. | ||
40 | Needed for banking, limitMotorUp, movementLimiting, ... | ||
41 | VehicleAddForce is not scaled by the simulation step but it is only | ||
42 | applied for one step. Should it be scaled? | ||
43 | Some vehicles should not be able to turn if no speed or off ground. | 43 | Some vehicles should not be able to turn if no speed or off ground. |
44 | Cannot edit/move a vehicle being ridden: it jumps back to the origional position. | 44 | Cannot edit/move a vehicle being ridden: it jumps back to the origional position. |
45 | Neb car jiggling left and right | 45 | Neb 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. |
48 | Implement referenceFrame for all the motion routines. | 48 | Implement referenceFrame for all the motion routines. |
49 | For limitMotorUp, use raycast down to find if vehicle is in the air. | ||
49 | Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE. | 50 | Angular 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. |
51 | Verify llGetVel() is returning a smooth and good value for vehicle movement. | 52 | Verify llGetVel() is returning a smooth and good value for vehicle movement. |
@@ -54,14 +55,13 @@ Implement function efficiency for lineaar and angular motion. | |||
54 | After getting off a vehicle, the root prim is phantom (can be walked through) | 55 | After 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 |
56 | Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint) | 57 | Linkset explosion after three "rides" on Nebadon lite vehicle (LinksetConstraint) |
57 | For limitMotorUp, use raycast down to find if vehicle is in the air. | ||
58 | Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties(). | 58 | Remove 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. |
60 | Incorporate inter-relationship of angular corrections. For instance, angularDeflection | 60 | Incorporate 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 | ||
64 | BULLETSIM TODO LIST: | 64 | GENERAL TODO LIST: |
65 | ================================================= | 65 | ================================================= |
66 | Implement an avatar mesh shape. The Bullet capsule is way too limited. | 66 | Implement 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 | |||
121 | Verify/think through scripts in children of linksets. What do they reference | 121 | Verify/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, ... |
123 | Confirm constraint linksets still work after making all the changes for compound linksets. | 123 | Confirm constraint linksets still work after making all the changes for compound linksets. |
124 | Use PostTaint callback to do rebuilds for constraint linksets to reduce rebuilding | ||
124 | Add 'changed' flag or similar to reduce the number of times a linkset is rebuilt. | 125 | Add '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. |
126 | Disable 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, ... | ||
129 | Speed up creation of large physical linksets | 127 | Speed 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 | |||
138 | Use the HACD convex hull routine in Bullet rather than the C# version. | 136 | Use the HACD convex hull routine in Bullet rather than the C# version. |
139 | Do we need to do convex hulls all the time? Can complex meshes be left meshes? | 137 | Do 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 |
141 | Test 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. | ||
143 | Debounce avatar contact so legs don't keep folding up when standing. | 140 | Debounce avatar contact so legs don't keep folding up when standing. |
144 | Implement LSL physics controls. Like STATUS_ROTATE_X. | 141 | Implement LSL physics controls. Like STATUS_ROTATE_X. |
145 | Add border extensions to terrain to help region crossings and objects leaving region. | 142 | Add border extensions to terrain to help region crossings and objects leaving region. |
146 | Use a different capsule shape for avatar when sitting | 143 | Use 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 | |||
150 | Performance test with lots of avatars. Can BulletSim support a thousand? | 146 | Performance test with lots of avatars. Can BulletSim support a thousand? |
151 | Optimize collisions in C++: only send up to the object subscribed to collisions. | 147 | Optimize 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) |
153 | Check whether SimMotionState needs large if statement (see TODO). | 149 | Check whether SimMotionState needs large if statement (see TODO). |
154 | |||
155 | Implement 'top colliders' info. | 150 | Implement 'top colliders' info. |
156 | Avatar jump | 151 | Avatar jump |
157 | Performance measurement and changes to make quicker. | 152 | Performance measurement and changes to make quicker. |
158 | Implement detailed physics stats (GetStats()). | 153 | Implement detailed physics stats (GetStats()). |
159 | |||
160 | Measure performance improvement from hulls | 154 | Measure performance improvement from hulls |
161 | Test not using ghost objects for volume detect implementation. | 155 | Test not using ghost objects for volume detect implementation. |
162 | Performance of closures and delegates for taint processing | 156 | Performance 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? |
165 | Is there are more efficient method of implementing pre and post step actions? | 159 | Is 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 | |||
168 | Physics Arena central pyramid: why is one side permiable? | 161 | Physics Arena central pyramid: why is one side permiable? |
169 | |||
170 | In SL, perfect spheres don't seem to have rolling friction. Add special case. | 162 | In SL, perfect spheres don't seem to have rolling friction. Add special case. |
171 | Enforce physical parameter min/max: | 163 | Enforce physical parameter min/max: |
172 | Gravity: [-1, 28] | 164 | Gravity: [-1, 28] |
@@ -197,22 +189,19 @@ Generalize Dynamics and PID with standardized motors. | |||
197 | Generalize Linkset and vehicles into PropertyManagers | 189 | Generalize 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. |
200 | Complete implemention of preStepActions | 192 | Better 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? | ||
203 | Implement linkset by setting position of children when root updated. (LinksetManual) | 194 | Implement linkset by setting position of children when root updated. (LinksetManual) |
204 | Linkset implementation using manual prim movement. | 195 | Linkset implementation using manual prim movement. |
205 | LinkablePrim class? Would that simplify/centralize the linkset logic? | 196 | LinkablePrim class? Would that simplify/centralize the linkset logic? |
206 | BSScene.UpdateParameterSet() is broken. How to set params on objects? | 197 | BSScene.UpdateParameterSet() is broken. How to set params on objects? |
207 | Remove HeightmapInfo from terrain specification | ||
208 | Since C++ code does not need terrain height, this structure et al are not needed. | ||
209 | Add floating motor for BS_FLOATS_ON_WATER so prim and avatar will | 198 | Add 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() |
211 | Should taints check for existance or activeness of target? | 200 | Should 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? |
216 | Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones) | 205 | Parameters for physics logging should be moved from BSScene to BSParam (at least boolean ones) |
217 | Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'? | 206 | Can some of the physical wrapper classes (BulletBody, BulletWorld, BulletShape) be 'sealed'? |
218 | There are TOO MANY interfaces from BulletSim core to Bullet itself | 207 | 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) | |||
282 | Meshes rendering as bounding boxes (DONE) | 271 | Meshes 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) |
284 | llMoveToTarget (Resolution: added simple motor to update the position.) | 273 | llMoveToTarget (Resolution: added simple motor to update the position.) |
274 | Angular motor direction is global coordinates rather than local coordinates (DONE) | ||
275 | Add 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) | ||
278 | VehicleAddForce 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) | ||
281 | Complete implemention of preStepActions (DONE) | ||
282 | Replace vehicle step call with prestep event. | ||
283 | Is there a need for postStepActions? postStepTaints? | ||
284 | Disable 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, ... | ||
287 | Remove 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 | ||