aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs30
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs6
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs4
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs11
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt30
5 files changed, 35 insertions, 46 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index 05ab180..8ecf2ff 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -581,9 +581,18 @@ namespace OpenSim.Region.Physics.BulletSPlugin
581 } 581 }
582 #endregion // Vehicle parameter setting 582 #endregion // Vehicle parameter setting
583 583
584 public void Refresh()
585 {
586 // If asking for a refresh, reset the physical parameters before the next simulation step.
587 PhysicsScene.PostTaintObject("BSDynamics.Refresh", Prim.LocalID, delegate()
588 {
589 SetPhysicalParameters();
590 });
591 }
592
584 // Some of the properties of this prim may have changed. 593 // Some of the properties of this prim may have changed.
585 // Do any updating needed for a vehicle 594 // Do any updating needed for a vehicle
586 public void Refresh() 595 private void SetPhysicalParameters()
587 { 596 {
588 if (IsActive) 597 if (IsActive)
589 { 598 {
@@ -614,7 +623,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
614 // The actual vehicle gravity is set to zero in Bullet so we can do all the application of same. 623 // The actual vehicle gravity is set to zero in Bullet so we can do all the application of same.
615 PhysicsScene.PE.SetGravity(Prim.PhysBody, Vector3.Zero); 624 PhysicsScene.PE.SetGravity(Prim.PhysBody, Vector3.Zero);
616 625
617 VDetailLog("{0},BSDynamics.Refresh,mass={1},inert={2},grav={3},aDamp={4},frict={5},rest={6},lFact={7},aFact={8}", 626 VDetailLog("{0},BSDynamics.SetPhysicalParameters,mass={1},inert={2},vehGrav={3},aDamp={4},frict={5},rest={6},lFact={7},aFact={8}",
618 Prim.LocalID, m_vehicleMass, Prim.Inertia, m_VehicleGravity, 627 Prim.LocalID, m_vehicleMass, Prim.Inertia, m_VehicleGravity,
619 BSParam.VehicleAngularDamping, BSParam.VehicleFriction, BSParam.VehicleRestitution, 628 BSParam.VehicleAngularDamping, BSParam.VehicleFriction, BSParam.VehicleRestitution,
620 BSParam.VehicleLinearFactor, BSParam.VehicleAngularFactor 629 BSParam.VehicleLinearFactor, BSParam.VehicleAngularFactor
@@ -622,26 +631,15 @@ namespace OpenSim.Region.Physics.BulletSPlugin
622 } 631 }
623 else 632 else
624 { 633 {
625 PhysicsScene.PE.RemoveFromCollisionFlags(Prim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS); 634 if (Prim.PhysBody.HasPhysicalBody)
635 PhysicsScene.PE.RemoveFromCollisionFlags(Prim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS);
626 } 636 }
627 } 637 }
628 638
629 public bool RemoveBodyDependencies(BSPhysObject prim) 639 public bool RemoveBodyDependencies(BSPhysObject prim)
630 { 640 {
631 // If active, we need to add our properties back when the body is rebuilt.
632 return IsActive;
633 }
634
635 public void RestoreBodyDependencies(BSPhysObject prim)
636 {
637 if (Prim.LocalID != prim.LocalID)
638 {
639 // The call should be on us by our prim. Error if not.
640 PhysicsScene.Logger.ErrorFormat("{0} RestoreBodyDependencies: called by not my prim. passedLocalID={1}, vehiclePrimLocalID={2}",
641 LogHeader, prim.LocalID, Prim.LocalID);
642 return;
643 }
644 Refresh(); 641 Refresh();
642 return IsActive;
645 } 643 }
646 644
647 #region Known vehicle value functions 645 #region Known vehicle value functions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
index 54dc458..92f6ee2 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
@@ -274,7 +274,7 @@ public sealed class BSLinksetCompound : BSLinkset
274 bool ret = false; 274 bool ret = false;
275 275
276 DetailLog("{0},BSLinksetCompound.RemoveBodyDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}", 276 DetailLog("{0},BSLinksetCompound.RemoveBodyDependencies,refreshIfChild,rID={1},rBody={2},isRoot={3}",
277 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody.AddrString, IsRoot(child)); 277 child.LocalID, LinksetRoot.LocalID, LinksetRoot.PhysBody, IsRoot(child));
278 278
279 if (!IsRoot(child)) 279 if (!IsRoot(child))
280 { 280 {
@@ -382,11 +382,11 @@ public sealed class BSLinksetCompound : BSLinkset
382 { 382 {
383 try 383 try
384 { 384 {
385 // Suppress rebuilding while rebuilding 385 // Suppress rebuilding while rebuilding. (We know rebuilding is on only one thread.)
386 Rebuilding = true; 386 Rebuilding = true;
387 387
388 // Cause the root shape to be rebuilt as a compound object with just the root in it 388 // Cause the root shape to be rebuilt as a compound object with just the root in it
389 LinksetRoot.ForceBodyShapeRebuild(true); 389 LinksetRoot.ForceBodyShapeRebuild(true /* inTaintTime */);
390 390
391 // The center of mass for the linkset is the geometric center of the group. 391 // The center of mass for the linkset is the geometric center of the group.
392 // Compute a displacement for each component so it is relative to the center-of-mass. 392 // Compute a displacement for each component so it is relative to the center-of-mass.
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index b5dd131..0b81122 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -1597,9 +1597,9 @@ public sealed class BSPrim : BSPhysObject
1597 public void CreateGeomAndObject(bool forceRebuild) 1597 public void CreateGeomAndObject(bool forceRebuild)
1598 { 1598 {
1599 // Create the correct physical representation for this type of object. 1599 // Create the correct physical representation for this type of object.
1600 // Updates PhysBody and PhysShape with the new information. 1600 // Updates base.PhysBody and base.PhysShape with the new information.
1601 // Ignore 'forceRebuild'. This routine makes the right choices and changes of necessary. 1601 // Ignore 'forceRebuild'. This routine makes the right choices and changes of necessary.
1602 PhysicsScene.Shapes.GetBodyAndShape(false, PhysicsScene.World, this, null, delegate(BulletBody dBody) 1602 PhysicsScene.Shapes.GetBodyAndShape(false /*forceRebuild */, PhysicsScene.World, this, null, delegate(BulletBody dBody)
1603 { 1603 {
1604 // Called if the current prim body is about to be destroyed. 1604 // Called if the current prim body is about to be destroyed.
1605 // Remove all the physical dependencies on the old body. 1605 // Remove all the physical dependencies on the old body.
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
index 9fbfcdc..e2daa72 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
@@ -116,8 +116,7 @@ public sealed class BSShapeCollection : IDisposable
116 // rebuild the body around it. 116 // rebuild the body around it.
117 // Updates prim.BSBody with information/pointers to requested body 117 // Updates prim.BSBody with information/pointers to requested body
118 // Returns 'true' if BSBody was changed. 118 // Returns 'true' if BSBody was changed.
119 bool newBody = CreateBody((newGeom || forceRebuild), prim, PhysicsScene.World, 119 bool newBody = CreateBody((newGeom || forceRebuild), prim, PhysicsScene.World, bodyCallback);
120 prim.PhysShape, bodyCallback);
121 ret = newGeom || newBody; 120 ret = newGeom || newBody;
122 } 121 }
123 DetailLog("{0},BSShapeCollection.GetBodyAndShape,taintExit,force={1},ret={2},body={3},shape={4}", 122 DetailLog("{0},BSShapeCollection.GetBodyAndShape,taintExit,force={1},ret={2},body={3},shape={4}",
@@ -933,8 +932,7 @@ public sealed class BSShapeCollection : IDisposable
933 // Updates prim.BSBody with the information about the new body if one is created. 932 // Updates prim.BSBody with the information about the new body if one is created.
934 // Returns 'true' if an object was actually created. 933 // Returns 'true' if an object was actually created.
935 // Called at taint-time. 934 // Called at taint-time.
936 private bool CreateBody(bool forceRebuild, BSPhysObject prim, BulletWorld sim, BulletShape shape, 935 private bool CreateBody(bool forceRebuild, BSPhysObject prim, BulletWorld sim, BodyDestructionCallback bodyCallback)
937 BodyDestructionCallback bodyCallback)
938 { 936 {
939 bool ret = false; 937 bool ret = false;
940 938
@@ -951,6 +949,7 @@ public sealed class BSShapeCollection : IDisposable
951 { 949 {
952 // If the collisionObject is not the correct type for solidness, rebuild what's there 950 // If the collisionObject is not the correct type for solidness, rebuild what's there
953 mustRebuild = true; 951 mustRebuild = true;
952 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,forceRebuildBecauseChangingBodyType,bodyType={1}", prim.LocalID, bodyType);
954 } 953 }
955 } 954 }
956 955
@@ -962,12 +961,12 @@ public sealed class BSShapeCollection : IDisposable
962 BulletBody aBody; 961 BulletBody aBody;
963 if (prim.IsSolid) 962 if (prim.IsSolid)
964 { 963 {
965 aBody = PhysicsScene.PE.CreateBodyFromShape(sim, shape, prim.LocalID, prim.RawPosition, prim.RawOrientation); 964 aBody = PhysicsScene.PE.CreateBodyFromShape(sim, prim.PhysShape, prim.LocalID, prim.RawPosition, prim.RawOrientation);
966 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,mesh,body={1}", prim.LocalID, aBody); 965 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,mesh,body={1}", prim.LocalID, aBody);
967 } 966 }
968 else 967 else
969 { 968 {
970 aBody = PhysicsScene.PE.CreateGhostFromShape(sim, shape, prim.LocalID, prim.RawPosition, prim.RawOrientation); 969 aBody = PhysicsScene.PE.CreateGhostFromShape(sim, prim.PhysShape, prim.LocalID, prim.RawPosition, prim.RawOrientation);
971 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,ghost,body={1}", prim.LocalID, aBody); 970 if (DDetail) DetailLog("{0},BSShapeCollection.CreateBody,ghost,body={1}", prim.LocalID, aBody);
972 } 971 }
973 972
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
index a95e169..d574a49 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt
@@ -6,6 +6,7 @@ One sided meshes? Should terrain be built into a closed shape?
6 Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 6 Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869
7Deleting a linkset while standing on the root will leave the physical shape of the root behind. 7Deleting a linkset while standing on the root will leave the physical shape of the root behind.
8 Not sure if it is because standing on it. Done with large prim linksets. 8 Not sure if it is because standing on it. Done with large prim linksets.
9Terrain detail: double terrain mesh detail
9Vehicle angular vertical attraction 10Vehicle angular vertical attraction
10vehicle angular banking 11vehicle angular banking
11Center-of-gravity 12Center-of-gravity
@@ -34,34 +35,20 @@ Vehicle script tuning/debugging
34 Weapon shooter script 35 Weapon shooter script
35Add material densities to the material types 36Add material densities to the material types
36 37
37CRASHES
38=================================================
39Crazyness during 20130115 office hours was PositionAdjustUnderground for both char and prim
40 m1:logs/20130115.0934/physics-BulletSim-20130115083613.log
41 Creation of Neb's terrain made the terrain "disappear". Everything started to fall
42 and then get restored to be above terrain.
4320121129.1411: editting/moving phys object across region boundries causes crash
44 getPos-> btRigidBody::upcast -> getBodyType -> BOOM
4520121128.1600: mesh object not rezzing (no physics mesh).
46 Causes many errors. Doesn't stop after first error with box shape.
47 Eventually crashes when deleting the object.
4820121206.1434: rez Sam-pan into OSGrid BulletSim11 region
49 Immediate simulator crash. Mono does not output any stacktrace and
50 log just stops after reporting taint-time linking of the linkset.
51
52VEHICLES TODO LIST: 38VEHICLES TODO LIST:
53================================================= 39=================================================
54Border crossing with linked vehicle causes crash 40Border crossing with linked vehicle causes crash
41 20121129.1411: editting/moving phys object across region boundries causes crash
42 getPos-> btRigidBody::upcast -> getBodyType -> BOOM
55Vehicles (Move smoothly) 43Vehicles (Move smoothly)
56Some vehicles should not be able to turn if no speed or off ground. 44Some vehicles should not be able to turn if no speed or off ground.
45What to do if vehicle and prim buoyancy differ?
57Cannot edit/move a vehicle being ridden: it jumps back to the origional position. 46Cannot edit/move a vehicle being ridden: it jumps back to the origional position.
58Neb car jiggling left and right 47Neb car jiggling left and right
59 Happens on terrain and any other mesh object. Flat cubes are much smoother. 48 Happens on terrain and any other mesh object. Flat cubes are much smoother.
60 This has been reduced but not eliminated. 49 This has been reduced but not eliminated.
61Implement referenceFrame for all the motion routines. 50Implement referenceFrame for all the motion routines.
62For limitMotorUp, use raycast down to find if vehicle is in the air. 51For limitMotorUp, use raycast down to find if vehicle is in the air.
63Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
64 Verify that angular motion specified around Z moves in the vehicle coordinates.
65Verify llGetVel() is returning a smooth and good value for vehicle movement. 52Verify llGetVel() is returning a smooth and good value for vehicle movement.
66llGetVel() should return the root's velocity if requested in a child prim. 53llGetVel() should return the root's velocity if requested in a child prim.
67Implement function efficiency for lineaar and angular motion. 54Implement function efficiency for lineaar and angular motion.
@@ -73,10 +60,11 @@ Remove vehicle angular velocity zeroing in BSPrim.UpdateProperties().
73Incorporate inter-relationship of angular corrections. For instance, angularDeflection 60Incorporate inter-relationship of angular corrections. For instance, angularDeflection
74 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
75 creates over-correction and over-shoot and wabbling. 62 creates over-correction and over-shoot and wabbling.
63Vehicle attributes are not restored when a vehicle is rezzed on region creation
64 Create vehicle, setup vehicle properties, restart region, vehicle is not reinitialized.
76 65
77GENERAL TODO LIST: 66GENERAL TODO LIST:
78================================================= 67=================================================
79Avatar standing on a moving object should start to move with the object.
80llMoveToTarget objects are not effected by gravity until target is removed. 68llMoveToTarget objects are not effected by gravity until target is removed.
81Compute CCD parameters based on body size 69Compute CCD parameters based on body size
82Can solver iterations be changed per body/shape? Can be for constraints but what 70Can solver iterations be changed per body/shape? Can be for constraints but what
@@ -330,4 +318,8 @@ Boats float low in the water (DONE)
330Boats floating at proper level (DONE) 318Boats floating at proper level (DONE)
331When is force introduced by SetForce removed? The prestep action could go forever. (DONE) 319When is force introduced by SetForce removed? The prestep action could go forever. (DONE)
332 (Resolution: setForce registers a prestep action which keeps applying the force) 320 (Resolution: setForce registers a prestep action which keeps applying the force)
333Child movement in linkset (don't rebuild linkset) (DONE 20130122)) \ No newline at end of file 321Child movement in linkset (don't rebuild linkset) (DONE 20130122))
322Avatar standing on a moving object should start to move with the object. (DONE 20130125)
323Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
324 Verify that angular motion specified around Z moves in the vehicle coordinates.
325 DONE 20130120: BulletSim properly applies force in vehicle relative coordinates. \ No newline at end of file