aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
diff options
context:
space:
mode:
authorRobert Adams2011-08-26 15:51:21 -0700
committerMic Bowman2011-08-26 15:51:21 -0700
commit21708b832b1d6679d5f6de27eb3bd0b920ef0fa7 (patch)
treedba3bb4565adfdd1aaad9720c002f1f1ca3ce990 /OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
parentMerge branch 'master' into bulletsim (diff)
downloadopensim-SC-21708b832b1d6679d5f6de27eb3bd0b920ef0fa7.zip
opensim-SC-21708b832b1d6679d5f6de27eb3bd0b920ef0fa7.tar.gz
opensim-SC-21708b832b1d6679d5f6de27eb3bd0b920ef0fa7.tar.bz2
opensim-SC-21708b832b1d6679d5f6de27eb3bd0b920ef0fa7.tar.xz
BulletSim: add mesh representation. Use meshes for static objects and switch to hulls for physical objects.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs20
1 files changed, 13 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 518be09..e91455a 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -37,7 +37,6 @@ using OpenMetaverse;
37using OpenSim.Region.Framework; 37using OpenSim.Region.Framework;
38 38
39// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim) 39// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim)
40// Parameterize BulletSim. Pass a structure of parameters to the C++ code. Capsule size, friction, ...
41// Adjust character capsule size when height is adjusted (ScenePresence.SetHeight) 40// Adjust character capsule size when height is adjusted (ScenePresence.SetHeight)
42// Test sculpties 41// Test sculpties
43// Compute physics FPS reasonably 42// Compute physics FPS reasonably
@@ -52,8 +51,6 @@ using OpenSim.Region.Framework;
52// Implement the genCollisions feature in BulletSim::SetObjectProperties (don't pass up unneeded collisions) 51// Implement the genCollisions feature in BulletSim::SetObjectProperties (don't pass up unneeded collisions)
53// Implement LockAngularMotion 52// Implement LockAngularMotion
54// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation) 53// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation)
55// Built Galton board (lots of MoveTo's) and some slats were not positioned correctly (mistakes scattered)
56// No mistakes with ODE. Shape creation race condition?
57// Does NeedsMeshing() really need to exclude all the different shapes? 54// Does NeedsMeshing() really need to exclude all the different shapes?
58// 55//
59namespace OpenSim.Region.Physics.BulletSPlugin 56namespace OpenSim.Region.Physics.BulletSPlugin
@@ -81,6 +78,11 @@ public class BSScene : PhysicsScene, IPhysicsParameters
81 { 78 {
82 get { return m_meshLOD; } 79 get { return m_meshLOD; }
83 } 80 }
81 private int m_sculptLOD;
82 public int SculptLOD
83 {
84 get { return m_sculptLOD; }
85 }
84 86
85 private int m_maxSubSteps; 87 private int m_maxSubSteps;
86 private float m_fixedTimeStep; 88 private float m_fixedTimeStep;
@@ -187,7 +189,8 @@ public class BSScene : PhysicsScene, IPhysicsParameters
187 _meshSculptedPrim = true; // mesh sculpted prims 189 _meshSculptedPrim = true; // mesh sculpted prims
188 _forceSimplePrimMeshing = false; // use complex meshing if called for 190 _forceSimplePrimMeshing = false; // use complex meshing if called for
189 191
190 m_meshLOD = 32; 192 m_meshLOD = 8;
193 m_sculptLOD = 32;
191 194
192 m_maxSubSteps = 10; 195 m_maxSubSteps = 10;
193 m_fixedTimeStep = 1f / 60f; 196 m_fixedTimeStep = 1f / 60f;
@@ -229,6 +232,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
229 _forceSimplePrimMeshing = pConfig.GetBoolean("ForceSimplePrimMeshing", _forceSimplePrimMeshing); 232 _forceSimplePrimMeshing = pConfig.GetBoolean("ForceSimplePrimMeshing", _forceSimplePrimMeshing);
230 233
231 m_meshLOD = pConfig.GetInt("MeshLevelOfDetail", m_meshLOD); 234 m_meshLOD = pConfig.GetInt("MeshLevelOfDetail", m_meshLOD);
235 m_sculptLOD = pConfig.GetInt("SculptLevelOfDetail", m_sculptLOD);
232 236
233 m_maxSubSteps = pConfig.GetInt("MaxSubSteps", m_maxSubSteps); 237 m_maxSubSteps = pConfig.GetInt("MaxSubSteps", m_maxSubSteps);
234 m_fixedTimeStep = pConfig.GetFloat("FixedTimeStep", m_fixedTimeStep); 238 m_fixedTimeStep = pConfig.GetFloat("FixedTimeStep", m_fixedTimeStep);
@@ -489,10 +493,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
489 // can use an internal representation for the prim 493 // can use an internal representation for the prim
490 if (!_forceSimplePrimMeshing) 494 if (!_forceSimplePrimMeshing)
491 { 495 {
492 // m_log.DebugFormat("{0}: NeedsMeshing: simple mesh: profshape={1}, curve={2}", LogHeader, pbs.ProfileShape, pbs.PathCurve);
493 if ((pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight) 496 if ((pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight)
494 || (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1 497 || (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1
495 && pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z)) 498 && pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z))
496 { 499 {
497 500
498 if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0 501 if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
@@ -663,7 +666,8 @@ public class BSScene : PhysicsScene, IPhysicsParameters
663 #region Runtime settable parameters 666 #region Runtime settable parameters
664 public static PhysParameterEntry[] SettableParameters = new PhysParameterEntry[] 667 public static PhysParameterEntry[] SettableParameters = new PhysParameterEntry[]
665 { 668 {
666 new PhysParameterEntry("MeshLOD", "Level of detail to render meshes (Power of two. Default 32)"), 669 new PhysParameterEntry("MeshLOD", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)"),
670 new PhysParameterEntry("SculptLOD", "Level of detail to render sculpties (32, 16, 8 or 4. 32=most detailed)"),
667 new PhysParameterEntry("MaxSubStep", "In simulation step, maximum number of substeps"), 671 new PhysParameterEntry("MaxSubStep", "In simulation step, maximum number of substeps"),
668 new PhysParameterEntry("FixedTimeStep", "In simulation step, seconds of one substep (1/60)"), 672 new PhysParameterEntry("FixedTimeStep", "In simulation step, seconds of one substep (1/60)"),
669 new PhysParameterEntry("MaxObjectMass", "Maximum object mass (10000.01)"), 673 new PhysParameterEntry("MaxObjectMass", "Maximum object mass (10000.01)"),
@@ -712,6 +716,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
712 switch (lparm) 716 switch (lparm)
713 { 717 {
714 case "meshlod": m_meshLOD = (int)val; break; 718 case "meshlod": m_meshLOD = (int)val; break;
719 case "sculptlod": m_sculptLOD = (int)val; break;
715 case "maxsubstep": m_maxSubSteps = (int)val; break; 720 case "maxsubstep": m_maxSubSteps = (int)val; break;
716 case "fixedtimestep": m_fixedTimeStep = val; break; 721 case "fixedtimestep": m_fixedTimeStep = val; break;
717 case "maxobjectmass": m_maximumObjectMass = val; break; 722 case "maxobjectmass": m_maximumObjectMass = val; break;
@@ -812,6 +817,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
812 switch (parm.ToLower()) 817 switch (parm.ToLower())
813 { 818 {
814 case "meshlod": val = (float)m_meshLOD; break; 819 case "meshlod": val = (float)m_meshLOD; break;
820 case "sculptlod": val = (float)m_sculptLOD; break;
815 case "maxsubstep": val = (float)m_maxSubSteps; break; 821 case "maxsubstep": val = (float)m_maxSubSteps; break;
816 case "fixedtimestep": val = m_fixedTimeStep; break; 822 case "fixedtimestep": val = m_fixedTimeStep; break;
817 case "maxobjectmass": val = m_maximumObjectMass; break; 823 case "maxobjectmass": val = m_maximumObjectMass; break;