aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorRobert Adams2013-05-13 13:03:13 -0700
committerRobert Adams2013-05-13 13:30:42 -0700
commit15360cbb6ba83e40f474cca84082c908af49c58e (patch)
tree353ca61be20e82ce3acf7e654f33509bd8707850 /OpenSim/Region
parentBulletSim: use heightmap terrain when using BulletXNA. (diff)
downloadopensim-SC_OLD-15360cbb6ba83e40f474cca84082c908af49c58e.zip
opensim-SC_OLD-15360cbb6ba83e40f474cca84082c908af49c58e.tar.gz
opensim-SC_OLD-15360cbb6ba83e40f474cca84082c908af49c58e.tar.bz2
opensim-SC_OLD-15360cbb6ba83e40f474cca84082c908af49c58e.tar.xz
BulletSim: add adjustment for avatar capsule height scaling. Makes
avatar standing on ground view better and enables tuning.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs27
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSParam.cs9
2 files changed, 32 insertions, 4 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 542f732..3671fc2 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -649,12 +649,12 @@ public sealed class BSCharacter : BSPhysObject
649 OMV.Vector3 newScale; 649 OMV.Vector3 newScale;
650 650
651 // Bullet's capsule total height is the "passed height + radius * 2"; 651 // Bullet's capsule total height is the "passed height + radius * 2";
652 // The base capsule is 1 diameter and 2 height (passed radius=0.5, passed height = 1) 652 // The base capsule is 1 unit in diameter and 2 units in height (passed radius=0.5, passed height = 1)
653 // The number we pass in for 'scaling' is the multiplier to get that base 653 // The number we pass in for 'scaling' is the multiplier to get that base
654 // shape to be the size desired. 654 // shape to be the size desired.
655 // So, when creating the scale for the avatar height, we take the passed height 655 // So, when creating the scale for the avatar height, we take the passed height
656 // (size.Z) and remove the caps. 656 // (size.Z) and remove the caps.
657 // Another oddity of the Bullet capsule implementation is that it presumes the Y 657 // An oddity of the Bullet capsule implementation is that it presumes the Y
658 // dimension is the radius of the capsule. Even though some of the code allows 658 // dimension is the radius of the capsule. Even though some of the code allows
659 // for a asymmetrical capsule, other parts of the code presume it is cylindrical. 659 // for a asymmetrical capsule, other parts of the code presume it is cylindrical.
660 660
@@ -662,8 +662,27 @@ public sealed class BSCharacter : BSPhysObject
662 newScale.X = size.X / 2f; 662 newScale.X = size.X / 2f;
663 newScale.Y = size.Y / 2f; 663 newScale.Y = size.Y / 2f;
664 664
665 float heightAdjust = BSParam.AvatarHeightMidFudge;
666 if (BSParam.AvatarHeightLowFudge != 0f || BSParam.AvatarHeightHighFudge != 0f)
667 {
668 // An avatar is between 1.61 and 2.12 meters. Midpoint is 1.87m.
669 // The "times 4" relies on the fact that the difference from the midpoint to the extremes is exactly 0.25
670 float midHeightOffset = size.Z - 1.87f;
671 if (midHeightOffset < 0f)
672 {
673 // Small avatar. Add the adjustment based on the distance from midheight
674 heightAdjust += -1f * midHeightOffset * 4f * BSParam.AvatarHeightLowFudge;
675 }
676 else
677 {
678 // Large avatar. Add the adjustment based on the distance from midheight
679 heightAdjust += midHeightOffset * 4f * BSParam.AvatarHeightHighFudge;
680 }
681 }
665 // The total scale height is the central cylindar plus the caps on the two ends. 682 // The total scale height is the central cylindar plus the caps on the two ends.
666 newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2)) / 2f; 683 newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2) + heightAdjust) / 2f;
684 // m_log.DebugFormat("{0} ComputeAvatarScale: size={1},adj={2},scale={3}", LogHeader, size, heightAdjust, newScale);
685
667 // If smaller than the endcaps, just fake like we're almost that small 686 // If smaller than the endcaps, just fake like we're almost that small
668 if (newScale.Z < 0) 687 if (newScale.Z < 0)
669 newScale.Z = 0.1f; 688 newScale.Z = 0.1f;
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
index 5504478..d33292f 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
@@ -125,6 +125,9 @@ public static class BSParam
125 public static float AvatarCapsuleWidth { get; private set; } 125 public static float AvatarCapsuleWidth { get; private set; }
126 public static float AvatarCapsuleDepth { get; private set; } 126 public static float AvatarCapsuleDepth { get; private set; }
127 public static float AvatarCapsuleHeight { get; private set; } 127 public static float AvatarCapsuleHeight { get; private set; }
128 public static float AvatarHeightLowFudge { get; private set; }
129 public static float AvatarHeightMidFudge { get; private set; }
130 public static float AvatarHeightHighFudge { get; private set; }
128 public static float AvatarContactProcessingThreshold { get; private set; } 131 public static float AvatarContactProcessingThreshold { get; private set; }
129 public static float AvatarBelowGroundUpCorrectionMeters { get; private set; } 132 public static float AvatarBelowGroundUpCorrectionMeters { get; private set; }
130 public static float AvatarStepHeight { get; private set; } 133 public static float AvatarStepHeight { get; private set; }
@@ -539,6 +542,12 @@ public static class BSParam
539 0.45f ), 542 0.45f ),
540 new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", 543 new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar",
541 1.5f ), 544 1.5f ),
545 new ParameterDefn<float>("AvatarHeightLowFudge", "A fudge factor to make small avatars stand on the ground",
546 -0.2f ),
547 new ParameterDefn<float>("AvatarHeightMidFudge", "A fudge distance to adjust average sized avatars to be standing on ground",
548 0.1f ),
549 new ParameterDefn<float>("AvatarHeightHighFudge", "A fudge factor to make tall avatars stand on the ground",
550 0.1f ),
542 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", 551 new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions",
543 0.1f ), 552 0.1f ),
544 new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", 553 new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground",