From 1d3ee7537fbf22d9e2e662ba3cb0c751d95f8056 Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Fri, 29 Oct 2010 05:11:35 +0000 Subject: [PATCH] Reverse order of arguments in quaternion multiplication in order to bring it in line with BulletX physics engine and Unity3D (it's reversed in LSL). Also should fix breakage in code that depends on this ordering like Opensim. TODO: comprehensive test suite for quaternion math git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3462 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse.Tests/TypeTests.cs | 4 ++-- OpenMetaverseTypes/Quaternion.cs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenMetaverse.Tests/TypeTests.cs b/OpenMetaverse.Tests/TypeTests.cs index ba9b0e51..fdfb63e1 100644 --- a/OpenMetaverse.Tests/TypeTests.cs +++ b/OpenMetaverse.Tests/TypeTests.cs @@ -115,7 +115,7 @@ namespace OpenMetaverse.Tests a = new Quaternion(1, 0, 0, 0); b = new Quaternion(0, 1, 0, 0); - expected = new Quaternion(0, 0, -1, 0); + expected = new Quaternion(0, 0, 1, 0); result = a * b; Assert.IsTrue(result == expected, a.ToString() + " * " + b.ToString() + " produced " + result.ToString() + @@ -123,7 +123,7 @@ namespace OpenMetaverse.Tests a = new Quaternion(0, 0, 1, 0); b = new Quaternion(0, 1, 0, 0); - expected = new Quaternion(1, 0, 0, 0); + expected = new Quaternion(-1, 0, 0, 0); result = a * b; Assert.IsTrue(result == expected, a.ToString() + " * " + b.ToString() + " produced " + result.ToString() + diff --git a/OpenMetaverseTypes/Quaternion.cs b/OpenMetaverseTypes/Quaternion.cs index b4a713a2..955c0dc6 100644 --- a/OpenMetaverseTypes/Quaternion.cs +++ b/OpenMetaverseTypes/Quaternion.cs @@ -602,10 +602,10 @@ namespace OpenMetaverse public static Quaternion Multiply(Quaternion a, Quaternion b) { return new Quaternion( - b.W * a.X + b.X * a.W + b.Y * a.Z - b.Z * a.Y, - b.W * a.Y + b.Y * a.W + b.Z * a.X - b.X * a.Z, - b.W * a.Z + b.Z * a.W + b.X * a.Y - b.Y * a.X, - b.W * a.W - b.X * a.X - b.Y * a.Y - b.Z * a.Z + a.W * b.X + a.X * b.W + a.Y * b.Z - a.Z * b.Y, + a.W * b.Y + a.Y * b.W + a.Z * b.X - a.X * b.Z, + a.W * b.Z + a.Z * b.W + a.X * b.Y - a.Y * b.X, + a.W * b.W - a.X * b.X - a.Y * b.Y - a.Z * b.Z ); }