aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
diff options
context:
space:
mode:
authorRobert Adams2013-05-06 18:06:34 -0700
committerRobert Adams2013-05-06 18:06:34 -0700
commitddd97cb78eb0f8dccd132c952239bd3211a7aba0 (patch)
tree4c1fea8b541a85373ff312cc216aba20e98d5068 /OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
parentBulletSim: properly free references to simple convex hull shapes. Didn't (diff)
downloadopensim-SC_OLD-ddd97cb78eb0f8dccd132c952239bd3211a7aba0.zip
opensim-SC_OLD-ddd97cb78eb0f8dccd132c952239bd3211a7aba0.tar.gz
opensim-SC_OLD-ddd97cb78eb0f8dccd132c952239bd3211a7aba0.tar.bz2
opensim-SC_OLD-ddd97cb78eb0f8dccd132c952239bd3211a7aba0.tar.xz
BulletSim: normalize quaternian rotations when building compound linksets.
Attempt to fix vehicles being twisted off the ground when they go physical.
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs14
1 files changed, 7 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
index 1f16cc8..350a5d1 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs
@@ -347,21 +347,21 @@ public sealed class BSLinksetCompound : BSLinkset
347 // Bullet presumes an object's origin (relative <0,0,0>) is its center-of-mass 347 // Bullet presumes an object's origin (relative <0,0,0>) is its center-of-mass
348 OMV.Vector3 centerOfMassW = ComputeLinksetCenterOfMass(); 348 OMV.Vector3 centerOfMassW = ComputeLinksetCenterOfMass();
349 349
350 OMV.Quaternion invRootOrientation = OMV.Quaternion.Inverse(LinksetRoot.RawOrientation); 350 OMV.Quaternion invRootOrientation = OMV.Quaternion.Normalize(OMV.Quaternion.Inverse(LinksetRoot.RawOrientation));
351 351
352 // 'centerDisplacement' is the value to subtract from children to give physical offset position 352 // 'centerDisplacement' is the value to subtract from children to give physical offset position
353 OMV.Vector3 centerDisplacement = (centerOfMassW - LinksetRoot.RawPosition) * invRootOrientation; 353 OMV.Vector3 centerDisplacementV = (centerOfMassW - LinksetRoot.RawPosition) * invRootOrientation;
354 if (UseBulletSimRootOffsetHack || disableCOM) 354 if (UseBulletSimRootOffsetHack || disableCOM)
355 { 355 {
356 centerDisplacement = OMV.Vector3.Zero; 356 centerDisplacementV = OMV.Vector3.Zero;
357 LinksetRoot.ClearDisplacement(); 357 LinksetRoot.ClearDisplacement();
358 } 358 }
359 else 359 else
360 { 360 {
361 LinksetRoot.SetEffectiveCenterOfMassDisplacement(centerDisplacement); 361 LinksetRoot.SetEffectiveCenterOfMassDisplacement(centerDisplacementV);
362 } 362 }
363 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,rootPos={1},com={2},comDisp={3}", 363 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,COM,rootPos={1},com={2},comDisp={3}",
364 LinksetRoot.LocalID, LinksetRoot.RawPosition, centerOfMassW, centerDisplacement); 364 LinksetRoot.LocalID, LinksetRoot.RawPosition, centerOfMassW, centerDisplacementV);
365 365
366 // Add the shapes of all the components of the linkset 366 // Add the shapes of all the components of the linkset
367 int memberIndex = 1; 367 int memberIndex = 1;
@@ -372,8 +372,8 @@ public sealed class BSLinksetCompound : BSLinkset
372 372
373 // Get a reference to the shape of the child and add that shape to the linkset compound shape 373 // Get a reference to the shape of the child and add that shape to the linkset compound shape
374 BSShape childShape = cPrim.PhysShape.GetReference(m_physicsScene, cPrim); 374 BSShape childShape = cPrim.PhysShape.GetReference(m_physicsScene, cPrim);
375 OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacement; 375 OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacementV;
376 OMV.Quaternion offsetRot = cPrim.RawOrientation * invRootOrientation; 376 OMV.Quaternion offsetRot = OMV.Quaternion.Normalize(cPrim.RawOrientation) * invRootOrientation;
377 m_physicsScene.PE.AddChildShapeToCompoundShape(linksetShape.physShapeInfo, childShape.physShapeInfo, offsetPos, offsetRot); 377 m_physicsScene.PE.AddChildShapeToCompoundShape(linksetShape.physShapeInfo, childShape.physShapeInfo, offsetPos, offsetRot);
378 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addChild,indx={1},cShape={2},offPos={3},offRot={4}", 378 DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addChild,indx={1},cShape={2},offPos={3},offRot={4}",
379 LinksetRoot.LocalID, memberIndex, childShape, offsetPos, offsetRot); 379 LinksetRoot.LocalID, memberIndex, childShape, offsetPos, offsetRot);