aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs30
1 files changed, 30 insertions, 0 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index 0fd1f73..612c68b 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -1358,6 +1358,35 @@ 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
1364 Vector3 VehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
1365
1366 // Flipping what was originally a timescale into a speed variable and then multiplying it by 2
1367 // since only computing half the distance between the angles.
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.
1372 Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
1373
1374 // This is only half the distance to the target so it will take 2 seconds to complete the turn.
1375 Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
1376
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
1380 VehicleRotationalVelocity += vertContributionV;
1381
1382 VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
1383 ControllingPrim.LocalID,
1384 VehicleUpAxis,
1385 predictedUp,
1386 torqueVector,
1387 vertContributionV);
1388 //=====================================================================
1389 /*
1361 // Possible solution derived from a discussion at: 1390 // Possible solution derived from a discussion at:
1362 // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no 1391 // http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
1363 1392
@@ -1392,6 +1421,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
1392 differenceAngle, 1421 differenceAngle,
1393 correctionRotation, 1422 correctionRotation,
1394 vertContributionV); 1423 vertContributionV);
1424 */
1395 1425
1396 // =================================================================== 1426 // ===================================================================
1397 /* 1427 /*