aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/Meshing/HelperTypes.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/Meshing/HelperTypes.cs')
-rw-r--r--OpenSim/Region/Physics/Meshing/HelperTypes.cs36
1 files changed, 24 insertions, 12 deletions
diff --git a/OpenSim/Region/Physics/Meshing/HelperTypes.cs b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
index 584133c..f031fb6 100644
--- a/OpenSim/Region/Physics/Meshing/HelperTypes.cs
+++ b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
@@ -51,9 +51,13 @@ public class Quaternion
51 { 51 {
52 // using (* 0.5) instead of (/2) 52 // using (* 0.5) instead of (/2)
53 w = (float)Math.Cos(angle * 0.5f); 53 w = (float)Math.Cos(angle * 0.5f);
54 x = axis.X * (float)Math.Sin(angle * 0.5f); 54 float sin = (float)Math.Sin(angle * 0.5f);
55 y = axis.Y * (float)Math.Sin(angle * 0.5f); 55 //x = axis.X * (float)Math.Sin(angle * 0.5f);
56 z = axis.Z * (float)Math.Sin(angle * 0.5f); 56 //y = axis.Y * (float)Math.Sin(angle * 0.5f);
57 //z = axis.Z * (float)Math.Sin(angle * 0.5f);
58 x = axis.X * sin;
59 y = axis.Y * sin;
60 z = axis.Z * sin;
57 normalize(); 61 normalize();
58 } 62 }
59 public static Quaternion operator *(Quaternion a, Quaternion b) 63 public static Quaternion operator *(Quaternion a, Quaternion b)
@@ -73,12 +77,18 @@ public class Quaternion
73 } 77 }
74 public void normalize() 78 public void normalize()
75 { 79 {
76 float mag = length(); 80 //float mag = length();
77 81
78 w /= mag; 82 //w /= mag;
79 x /= mag; 83 //x /= mag;
80 y /= mag; 84 //y /= mag;
81 z /= mag; 85 //z /= mag;
86 float iMag = 1.0f / length();
87
88 w *= iMag;
89 x *= iMag;
90 y *= iMag;
91 z *= iMag;
82 } 92 }
83 public float length() 93 public float length()
84 { 94 {
@@ -169,7 +179,8 @@ public class Vertex : PhysicsVector, IComparable<Vertex>
169 float tlength = length(); 179 float tlength = length();
170 if (tlength != 0) 180 if (tlength != 0)
171 { 181 {
172 return new Vertex(X / tlength, Y / tlength, Z / tlength); 182 float mul = 1.0f / tlength;
183 return new Vertex(X * mul, Y * mul, Z * mul);
173 } 184 }
174 else 185 else
175 { 186 {
@@ -230,9 +241,10 @@ public class Vertex : PhysicsVector, IComparable<Vertex>
230 { 241 {
231 return new Vertex(0f,0f,0f); 242 return new Vertex(0f,0f,0f);
232 } 243 }
233 v1.X /= am; 244 float mul = 1.0f / am;
234 v1.Y /= am; 245 v1.X *= mul;
235 v1.Z /= am; 246 v1.Y *= mul;
247 v1.Z *= mul;
236 return v1; 248 return v1;
237 } 249 }
238 250