diff options
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index 0fd1f73..723be0b 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | |||
@@ -1358,6 +1358,28 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1358 | // If vertical attaction timescale is reasonable | 1358 | // If vertical attaction timescale is reasonable |
1359 | if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff) | 1359 | if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff) |
1360 | { | 1360 | { |
1361 | //Another formula to try got from : | ||
1362 | //http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html | ||
1363 | Vector3 VehicleUpAxis = Vector3.UnitZ *VehicleOrientation; | ||
1364 | //Flipping what was originally a timescale into a speed variable and then multiplying it by 2 since only computing half | ||
1365 | //the distance between the angles. | ||
1366 | float VerticalAttractionSpeed=(1/m_verticalAttractionTimescale)*2.0f; | ||
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 | ||
1368 | //adjustment and less fighting between the various forces | ||
1369 | 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. | ||
1371 | 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 | ||
1373 | Vector3 vertContributionV=torqueVector * VerticalAttractionSpeed *VerticalAttractionSpeed; | ||
1374 | VehicleRotationalVelocity += vertContributionV; | ||
1375 | VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}", | ||
1376 | ControllingPrim.LocalID, | ||
1377 | VehicleUpAxis, | ||
1378 | predictedUp, | ||
1379 | torqueVector, | ||
1380 | vertContributionV); | ||
1381 | //===================================================================== | ||
1382 | /* | ||
1361 | // Possible solution derived from a discussion at: | 1383 | // Possible solution derived from a discussion at: |
1362 | // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no | 1384 | // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no |
1363 | 1385 | ||
@@ -1392,6 +1414,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin | |||
1392 | differenceAngle, | 1414 | differenceAngle, |
1393 | correctionRotation, | 1415 | correctionRotation, |
1394 | vertContributionV); | 1416 | vertContributionV); |
1417 | */ | ||
1395 | 1418 | ||
1396 | // =================================================================== | 1419 | // =================================================================== |
1397 | /* | 1420 | /* |