diff options
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index 723be0b..612c68b 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | |||
@@ -1360,19 +1360,26 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1360 | { | 1360 | { |
1361 | //Another formula to try got from : | 1361 | //Another formula to try got from : |
1362 | //http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html | 1362 | //http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html |
1363 | Vector3 VehicleUpAxis = Vector3.UnitZ *VehicleOrientation; | 1363 | |
1364 | //Flipping what was originally a timescale into a speed variable and then multiplying it by 2 since only computing half | 1364 | Vector3 VehicleUpAxis = Vector3.UnitZ * VehicleOrientation; |
1365 | //the distance between the angles. | 1365 | |
1366 | float VerticalAttractionSpeed=(1/m_verticalAttractionTimescale)*2.0f; | 1366 | // Flipping what was originally a timescale into a speed variable and then multiplying it by 2 |
1367 | //making a prediction of where the up axis will be when this is applied rather then where it is now this makes for a smoother | 1367 | // since only computing half the distance between the angles. |
1368 | //adjustment and less fighting between the various forces | 1368 | float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f; |
1369 | |||
1370 | // Make a prediction of where the up axis will be when this is applied rather then where it is now as | ||
1371 | // this makes for a smoother adjustment and less fighting between the various forces. | ||
1369 | Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f); | 1372 | Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f); |
1370 | //this is only half the distance to the target so it will take 2 seconds to complete the turn. | 1373 | |
1374 | // This is only half the distance to the target so it will take 2 seconds to complete the turn. | ||
1371 | Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ); | 1375 | Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ); |
1372 | //Scaling vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared | 1376 | |
1373 | Vector3 vertContributionV=torqueVector * VerticalAttractionSpeed *VerticalAttractionSpeed; | 1377 | // Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared |
1378 | Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed; | ||
1379 | |||
1374 | VehicleRotationalVelocity += vertContributionV; | 1380 | VehicleRotationalVelocity += vertContributionV; |
1375 | VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}", | 1381 | |
1382 | VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}", | ||
1376 | ControllingPrim.LocalID, | 1383 | ControllingPrim.LocalID, |
1377 | VehicleUpAxis, | 1384 | VehicleUpAxis, |
1378 | predictedUp, | 1385 | predictedUp, |