aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs12
1 files changed, 7 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 1c152be..0c17a90 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -270,13 +270,15 @@ namespace OpenSim.Region.ScriptEngine.Shared
270 // Vector-Rotation Math 270 // Vector-Rotation Math
271 public static Vector3 operator *(Vector3 v, Quaternion r) 271 public static Vector3 operator *(Vector3 v, Quaternion r)
272 { 272 {
273 Quaternion vq = new Quaternion(v.x, v.y, v.z, 0); 273 double rx = r.s * v.x + r.y * v.z - r.z * v.y;
274 Quaternion nq = new Quaternion(-r.x, -r.y, -r.z, r.s); 274 double ry = r.s * v.y + r.z * v.x - r.x * v.z;
275 double rz = r.s * v.z + r.x * v.y - r.y * v.x;
275 276
276 // adapted for operator * computing "b * a" 277 v.x += 2.0f * (rz * r.y - ry * r.z);
277 Quaternion result = nq * (vq * r); 278 v.y += 2.0f * (rx * r.z - rz * r.x);
279 v.z += 2.0f * (ry * r.x - rx * r.y);
278 280
279 return new Vector3(result.x, result.y, result.z); 281 return v;
280 } 282 }
281 283
282 public static Vector3 operator /(Vector3 v, Quaternion r) 284 public static Vector3 operator /(Vector3 v, Quaternion r)