diff options
author | Robert Adams | 2012-10-10 09:43:46 -0700 |
---|---|---|
committer | Robert Adams | 2012-10-11 14:01:14 -0700 |
commit | 919569f6ecd5fe84d0f5b0981a48b4808a44f7ad (patch) | |
tree | fdd01ac155d477e7a55ee148527a6107add0c7a8 /OpenSim/Region/Physics | |
parent | BulletSim: cosmetic changes (comments and renaming). Give mass to terrain to ... (diff) | |
download | opensim-SC_OLD-919569f6ecd5fe84d0f5b0981a48b4808a44f7ad.zip opensim-SC_OLD-919569f6ecd5fe84d0f5b0981a48b4808a44f7ad.tar.gz opensim-SC_OLD-919569f6ecd5fe84d0f5b0981a48b4808a44f7ad.tar.bz2 opensim-SC_OLD-919569f6ecd5fe84d0f5b0981a48b4808a44f7ad.tar.xz |
BulletSim: Change defaults for constraint CFM and ERP to make large linksets more rigid. Remove mass calculation for terrain (it should stay a static object).
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 4 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs | 15 |
2 files changed, 8 insertions, 11 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 50091cc..617bdb4 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -1099,12 +1099,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
1099 | (s) => { return s.m_params[0].linkConstraintTransMotorMaxForce; }, | 1099 | (s) => { return s.m_params[0].linkConstraintTransMotorMaxForce; }, |
1100 | (s,p,l,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = v; } ), | 1100 | (s,p,l,v) => { s.m_params[0].linkConstraintTransMotorMaxForce = v; } ), |
1101 | new ParameterDefn("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", | 1101 | new ParameterDefn("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", |
1102 | 0.1f, | 1102 | 0.001f, |
1103 | (s,cf,p,v) => { s.m_params[0].linkConstraintCFM = cf.GetFloat(p, v); }, | 1103 | (s,cf,p,v) => { s.m_params[0].linkConstraintCFM = cf.GetFloat(p, v); }, |
1104 | (s) => { return s.m_params[0].linkConstraintCFM; }, | 1104 | (s) => { return s.m_params[0].linkConstraintCFM; }, |
1105 | (s,p,l,v) => { s.m_params[0].linkConstraintCFM = v; } ), | 1105 | (s,p,l,v) => { s.m_params[0].linkConstraintCFM = v; } ), |
1106 | new ParameterDefn("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", | 1106 | new ParameterDefn("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", |
1107 | 0.2f, | 1107 | 0.8f, |
1108 | (s,cf,p,v) => { s.m_params[0].linkConstraintERP = cf.GetFloat(p, v); }, | 1108 | (s,cf,p,v) => { s.m_params[0].linkConstraintERP = cf.GetFloat(p, v); }, |
1109 | (s) => { return s.m_params[0].linkConstraintERP; }, | 1109 | (s) => { return s.m_params[0].linkConstraintERP; }, |
1110 | (s,p,l,v) => { s.m_params[0].linkConstraintERP = v; } ), | 1110 | (s,p,l,v) => { s.m_params[0].linkConstraintERP = v; } ), |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs index 2808603..caf411e 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSTerrainManager.cs | |||
@@ -114,6 +114,8 @@ public class BSTerrainManager | |||
114 | BulletSimAPI.CreateBodyWithDefaultMotionState2(groundPlaneShape.ptr, BSScene.GROUNDPLANE_ID, | 114 | BulletSimAPI.CreateBodyWithDefaultMotionState2(groundPlaneShape.ptr, BSScene.GROUNDPLANE_ID, |
115 | Vector3.Zero, Quaternion.Identity)); | 115 | Vector3.Zero, Quaternion.Identity)); |
116 | BulletSimAPI.AddObjectToWorld2(PhysicsScene.World.ptr, m_groundPlane.ptr); | 116 | BulletSimAPI.AddObjectToWorld2(PhysicsScene.World.ptr, m_groundPlane.ptr); |
117 | // Ground plane does not move | ||
118 | BulletSimAPI.ForceActivationState2(m_groundPlane.ptr, ActivationState.DISABLE_SIMULATION); | ||
117 | // Everything collides with the ground plane. | 119 | // Everything collides with the ground plane. |
118 | BulletSimAPI.SetCollisionFilterMask2(m_groundPlane.ptr, | 120 | BulletSimAPI.SetCollisionFilterMask2(m_groundPlane.ptr, |
119 | (uint)CollisionFilterGroups.GroundPlaneFilter, (uint)CollisionFilterGroups.GroundPlaneMask); | 121 | (uint)CollisionFilterGroups.GroundPlaneFilter, (uint)CollisionFilterGroups.GroundPlaneMask); |
@@ -296,16 +298,16 @@ public class BSTerrainManager | |||
296 | mapInfo.Ptr = BulletSimAPI.CreateHeightMapInfo2(PhysicsScene.World.ptr, mapInfo.ID, | 298 | mapInfo.Ptr = BulletSimAPI.CreateHeightMapInfo2(PhysicsScene.World.ptr, mapInfo.ID, |
297 | mapInfo.minCoords, mapInfo.maxCoords, mapInfo.heightMap, TERRAIN_COLLISION_MARGIN); | 299 | mapInfo.minCoords, mapInfo.maxCoords, mapInfo.heightMap, TERRAIN_COLLISION_MARGIN); |
298 | 300 | ||
301 | // Create the terrain shape from the mapInfo | ||
302 | mapInfo.terrainShape = new BulletShape(BulletSimAPI.CreateTerrainShape2(mapInfo.Ptr), | ||
303 | ShapeData.PhysicsShapeType.SHAPE_TERRAIN); | ||
304 | |||
299 | // The terrain object initial position is at the center of the object | 305 | // The terrain object initial position is at the center of the object |
300 | Vector3 centerPos; | 306 | Vector3 centerPos; |
301 | centerPos.X = minCoords.X + (mapInfo.sizeX / 2f); | 307 | centerPos.X = minCoords.X + (mapInfo.sizeX / 2f); |
302 | centerPos.Y = minCoords.Y + (mapInfo.sizeY / 2f); | 308 | centerPos.Y = minCoords.Y + (mapInfo.sizeY / 2f); |
303 | centerPos.Z = minZ + ((maxZ - minZ) / 2f); | 309 | centerPos.Z = minZ + ((maxZ - minZ) / 2f); |
304 | 310 | ||
305 | // Create the terrain shape from the mapInfo | ||
306 | mapInfo.terrainShape = new BulletShape(BulletSimAPI.CreateTerrainShape2(mapInfo.Ptr), | ||
307 | ShapeData.PhysicsShapeType.SHAPE_TERRAIN); | ||
308 | |||
309 | mapInfo.terrainBody = new BulletBody(mapInfo.ID, | 311 | mapInfo.terrainBody = new BulletBody(mapInfo.ID, |
310 | BulletSimAPI.CreateBodyWithDefaultMotionState2(mapInfo.terrainShape.ptr, | 312 | BulletSimAPI.CreateBodyWithDefaultMotionState2(mapInfo.terrainShape.ptr, |
311 | id, centerPos, Quaternion.Identity)); | 313 | id, centerPos, Quaternion.Identity)); |
@@ -320,11 +322,6 @@ public class BSTerrainManager | |||
320 | BulletSimAPI.SetRestitution2(mapInfo.terrainBody.ptr, PhysicsScene.Params.terrainRestitution); | 322 | BulletSimAPI.SetRestitution2(mapInfo.terrainBody.ptr, PhysicsScene.Params.terrainRestitution); |
321 | BulletSimAPI.SetCollisionFlags2(mapInfo.terrainBody.ptr, CollisionFlags.CF_STATIC_OBJECT); | 323 | BulletSimAPI.SetCollisionFlags2(mapInfo.terrainBody.ptr, CollisionFlags.CF_STATIC_OBJECT); |
322 | 324 | ||
323 | float terrainMass = 1000; | ||
324 | Vector3 localInertia = BulletSimAPI.CalculateLocalInertia2(mapInfo.terrainBody.ptr, terrainMass); | ||
325 | BulletSimAPI.SetMassProps2(mapInfo.terrainBody.ptr, terrainMass, localInertia); | ||
326 | BulletSimAPI.UpdateInertiaTensor2(mapInfo.terrainBody.ptr); | ||
327 | |||
328 | // Return the new terrain to the world of physical objects | 325 | // Return the new terrain to the world of physical objects |
329 | BulletSimAPI.AddObjectToWorld2(PhysicsScene.World.ptr, mapInfo.terrainBody.ptr); | 326 | BulletSimAPI.AddObjectToWorld2(PhysicsScene.World.ptr, mapInfo.terrainBody.ptr); |
330 | 327 | ||