aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/Meshing
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/Meshing')
-rw-r--r--OpenSim/Region/Physics/Meshing/Extruder.cs13
-rw-r--r--OpenSim/Region/Physics/Meshing/HelperTypes.cs110
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs3
-rw-r--r--OpenSim/Region/Physics/Meshing/PrimMesher.cs11
-rw-r--r--OpenSim/Region/Physics/Meshing/SculptMesh.cs7
5 files changed, 41 insertions, 103 deletions
diff --git a/OpenSim/Region/Physics/Meshing/Extruder.cs b/OpenSim/Region/Physics/Meshing/Extruder.cs
index a47b6ae..1fc65e3 100644
--- a/OpenSim/Region/Physics/Meshing/Extruder.cs
+++ b/OpenSim/Region/Physics/Meshing/Extruder.cs
@@ -26,6 +26,7 @@
26 */ 26 */
27//#define SPAM 27//#define SPAM
28 28
29using OpenMetaverse;
29using OpenSim.Region.Physics.Manager; 30using OpenSim.Region.Physics.Manager;
30 31
31namespace OpenSim.Region.Physics.Meshing 32namespace OpenSim.Region.Physics.Meshing
@@ -72,9 +73,6 @@ namespace OpenSim.Region.Physics.Meshing
72 { 73 {
73 Mesh result = new Mesh(); 74 Mesh result = new Mesh();
74 75
75 // Quaternion tt = new Quaternion();
76 // Vertex v2 = new Vertex(0, 0, 0);
77
78 Mesh newLayer; 76 Mesh newLayer;
79 Mesh lastLayer = null; 77 Mesh lastLayer = null;
80 78
@@ -163,7 +161,7 @@ namespace OpenSim.Region.Physics.Meshing
163 161
164 // apply twist rotation to the profile layer and position the layer in the prim 162 // apply twist rotation to the profile layer and position the layer in the prim
165 163
166 Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); 164 Quaternion profileRot = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist);
167 foreach (Vertex v in newLayer.vertices) 165 foreach (Vertex v in newLayer.vertices)
168 { 166 {
169 if (v != null) 167 if (v != null)
@@ -259,9 +257,6 @@ namespace OpenSim.Region.Physics.Meshing
259 { 257 {
260 Mesh result = new Mesh(); 258 Mesh result = new Mesh();
261 259
262 // Quaternion tt = new Quaternion();
263 // Vertex v2 = new Vertex(0, 0, 0);
264
265 Mesh newLayer; 260 Mesh newLayer;
266 Mesh lastLayer = null; 261 Mesh lastLayer = null;
267 262
@@ -377,7 +372,7 @@ namespace OpenSim.Region.Physics.Meshing
377 // next apply twist rotation to the profile layer 372 // next apply twist rotation to the profile layer
378 if (twistTotal != 0.0f || twistBot != 0.0f) 373 if (twistTotal != 0.0f || twistBot != 0.0f)
379 { 374 {
380 Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); 375 Quaternion profileRot = new Quaternion(new Vector3(0.0f, 0.0f, 1.0f), twist);
381 foreach (Vertex v in newLayer.vertices) 376 foreach (Vertex v in newLayer.vertices)
382 { 377 {
383 if (v != null) 378 if (v != null)
@@ -392,7 +387,7 @@ namespace OpenSim.Region.Physics.Meshing
392 387
393 // now orient the rotation of the profile layer relative to it's position on the path 388 // now orient the rotation of the profile layer relative to it's position on the path
394 // adding pushY to the angle used to generate the quat appears to approximate the viewer 389 // adding pushY to the angle used to generate the quat appears to approximate the viewer
395 Quaternion layerRot = new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f); 390 Quaternion layerRot = Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f);
396 foreach (Vertex v in newLayer.vertices) 391 foreach (Vertex v in newLayer.vertices)
397 { 392 {
398 if (v != null) 393 if (v != null)
diff --git a/OpenSim/Region/Physics/Meshing/HelperTypes.cs b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
index 2cb8d04..7491782 100644
--- a/OpenSim/Region/Physics/Meshing/HelperTypes.cs
+++ b/OpenSim/Region/Physics/Meshing/HelperTypes.cs
@@ -29,70 +29,10 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Diagnostics; 30using System.Diagnostics;
31using System.Globalization; 31using System.Globalization;
32using OpenMetaverse;
32using OpenSim.Region.Physics.Manager; 33using OpenSim.Region.Physics.Manager;
33using OpenSim.Region.Physics.Meshing; 34using OpenSim.Region.Physics.Meshing;
34 35
35public class Quaternion
36{
37 public float x = 0;
38 public float y = 0;
39 public float z = 0;
40 public float w = 1;
41
42 public Quaternion()
43 {
44
45 }
46 public Quaternion(float x1, float y1, float z1, float w1)
47 {
48 x = x1; y = y1; z = z1; w = w1;
49 }
50 public Quaternion(Vertex axis, float angle)
51 {
52 // using (* 0.5) instead of (/2)
53 w = (float)Math.Cos(angle * 0.5f);
54 float sin = (float)Math.Sin(angle * 0.5f);
55 //x = axis.X * (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;
61 normalize();
62 }
63 public static Quaternion operator *(Quaternion a, Quaternion b)
64 {
65 Quaternion c = new Quaternion();
66 c.x = a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y;
67 c.y = a.w * b.y + a.y * b.w + a.z * b.x - a.x * b.z;
68 c.z = a.w * b.z + a.z * b.w + a.x * b.y - a.y * b.x;
69 c.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;
70 return c;
71 }
72
73 public void normalize()
74 {
75 //float mag = length();
76
77 //w /= mag;
78 //x /= mag;
79 //y /= mag;
80 //z /= mag;
81 float iMag = 1.0f / length();
82
83 w *= iMag;
84 x *= iMag;
85 y *= iMag;
86 z *= iMag;
87 }
88 public float length()
89 {
90 return (float)Math.Sqrt(w * w + x * x + y * y + z * z);
91 }
92}
93
94
95
96public class Vertex : PhysicsVector, IComparable<Vertex> 36public class Vertex : PhysicsVector, IComparable<Vertex>
97{ 37{
98 public Vertex(float x, float y, float z) 38 public Vertex(float x, float y, float z)
@@ -129,34 +69,34 @@ public class Vertex : PhysicsVector, IComparable<Vertex>
129 69
130 Vertex v2 = new Vertex(0f, 0f, 0f); 70 Vertex v2 = new Vertex(0f, 0f, 0f);
131 71
132 v2.X = q.w * q.w * v.X + 72 v2.X = q.W * q.W * v.X +
133 2f * q.y * q.w * v.Z - 73 2f * q.Y * q.W * v.Z -
134 2f * q.z * q.w * v.Y + 74 2f * q.Z * q.W * v.Y +
135 q.x * q.x * v.X + 75 q.X * q.X * v.X +
136 2f * q.y * q.x * v.Y + 76 2f * q.Y * q.X * v.Y +
137 2f * q.z * q.x * v.Z - 77 2f * q.Z * q.X * v.Z -
138 q.z * q.z * v.X - 78 q.Z * q.Z * v.X -
139 q.y * q.y * v.X; 79 q.Y * q.Y * v.X;
140 80
141 v2.Y = 81 v2.Y =
142 2f * q.x * q.y * v.X + 82 2f * q.X * q.Y * v.X +
143 q.y * q.y * v.Y + 83 q.Y * q.Y * v.Y +
144 2f * q.z * q.y * v.Z + 84 2f * q.Z * q.Y * v.Z +
145 2f * q.w * q.z * v.X - 85 2f * q.W * q.Z * v.X -
146 q.z * q.z * v.Y + 86 q.Z * q.Z * v.Y +
147 q.w * q.w * v.Y - 87 q.W * q.W * v.Y -
148 2f * q.x * q.w * v.Z - 88 2f * q.X * q.W * v.Z -
149 q.x * q.x * v.Y; 89 q.X * q.X * v.Y;
150 90
151 v2.Z = 91 v2.Z =
152 2f * q.x * q.z * v.X + 92 2f * q.X * q.Z * v.X +
153 2f * q.y * q.z * v.Y + 93 2f * q.Y * q.Z * v.Y +
154 q.z * q.z * v.Z - 94 q.Z * q.Z * v.Z -
155 2f * q.w * q.y * v.X - 95 2f * q.W * q.Y * v.X -
156 q.y * q.y * v.Z + 96 q.Y * q.Y * v.Z +
157 2f * q.w * q.x * v.Y - 97 2f * q.W * q.X * v.Y -
158 q.x * q.x * v.Z + 98 q.X * q.X * v.Z +
159 q.w * q.w * v.Z; 99 q.W * q.W * v.Z;
160 100
161 return v2; 101 return v2;
162 } 102 }
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index ecde92a..f955c52 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -30,6 +30,7 @@ using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using OpenSim.Framework; 31using OpenSim.Framework;
32using OpenSim.Region.Physics.Manager; 32using OpenSim.Region.Physics.Manager;
33using OpenMetaverse;
33 34
34namespace OpenSim.Region.Physics.Meshing 35namespace OpenSim.Region.Physics.Meshing
35{ 36{
@@ -1559,7 +1560,7 @@ namespace OpenSim.Region.Physics.Meshing
1559 1560
1560 if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle) 1561 if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
1561 { 1562 {
1562 Quaternion zFlip = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), (float)Math.PI); 1563 Quaternion zFlip = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), (float)Math.PI);
1563 Vertex vTmp = new Vertex(0.0f, 0.0f, 0.0f); 1564 Vertex vTmp = new Vertex(0.0f, 0.0f, 0.0f);
1564 foreach (Vertex v in cuttedHull.getVertices()) 1565 foreach (Vertex v in cuttedHull.getVertices())
1565 if (v != null) 1566 if (v != null)
diff --git a/OpenSim/Region/Physics/Meshing/PrimMesher.cs b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
index 86bdabc..08b2d10 100644
--- a/OpenSim/Region/Physics/Meshing/PrimMesher.cs
+++ b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
@@ -29,6 +29,7 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.IO; 30using System.IO;
31using OpenSim.Region.Physics.Manager; 31using OpenSim.Region.Physics.Manager;
32using OpenMetaverse;
32 33
33namespace OpenSim.Region.Physics.Meshing 34namespace OpenSim.Region.Physics.Meshing
34{ 35{
@@ -783,7 +784,7 @@ angles24 = [
783 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); 784 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides);
784 785
785 if (initialProfileRot != 0.0f) 786 if (initialProfileRot != 0.0f)
786 profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); 787 profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot));
787 788
788 bool done = false; 789 bool done = false;
789 while (!done) 790 while (!done)
@@ -807,7 +808,7 @@ angles24 = [
807 808
808 float twist = twistBegin + twistTotal * percentOfPath; 809 float twist = twistBegin + twistTotal * percentOfPath;
809 if (twist != 0.0f) 810 if (twist != 0.0f)
810 newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); 811 newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist));
811 812
812 newLayer.AddPos(xOffset, yOffset, zOffset); 813 newLayer.AddPos(xOffset, yOffset, zOffset);
813 814
@@ -948,7 +949,7 @@ angles24 = [
948 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); 949 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides);
949 950
950 if (initialProfileRot != 0.0f) 951 if (initialProfileRot != 0.0f)
951 profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); 952 profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot));
952 953
953 bool done = false; 954 bool done = false;
954 while (!done) // loop through the length of the path and add the layers 955 while (!done) // loop through the length of the path and add the layers
@@ -991,12 +992,12 @@ angles24 = [
991 992
992 // next apply twist rotation to the profile layer 993 // next apply twist rotation to the profile layer
993 if (twistTotal != 0.0f || twistBegin != 0.0f) 994 if (twistTotal != 0.0f || twistBegin != 0.0f)
994 newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); 995 newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist));
995 996
996 // now orient the rotation of the profile layer relative to it's position on the path 997 // now orient the rotation of the profile layer relative to it's position on the path
997 // adding taperY to the angle used to generate the quat appears to approximate the viewer 998 // adding taperY to the angle used to generate the quat appears to approximate the viewer
998 //newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f)); 999 //newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f));
999 newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY)); 1000 newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), angle + this.topShearY));
1000 newLayer.AddPos(xOffset, yOffset, zOffset); 1001 newLayer.AddPos(xOffset, yOffset, zOffset);
1001 1002
1002 if (angle == startAngle) 1003 if (angle == startAngle)
diff --git a/OpenSim/Region/Physics/Meshing/SculptMesh.cs b/OpenSim/Region/Physics/Meshing/SculptMesh.cs
index 360b2f7..707c0e3 100644
--- a/OpenSim/Region/Physics/Meshing/SculptMesh.cs
+++ b/OpenSim/Region/Physics/Meshing/SculptMesh.cs
@@ -30,14 +30,14 @@ using System.Collections.Generic;
30using System.Drawing; 30using System.Drawing;
31using System.Drawing.Imaging; 31using System.Drawing.Imaging;
32using System.Text; 32using System.Text;
33using OpenJPEGNet; 33using OpenMetaverse.Imaging;
34using Image = System.Drawing.Image;
35 34
36namespace OpenSim.Region.Physics.Meshing 35namespace OpenSim.Region.Physics.Meshing
37{ 36{
38 // This functionality based on the XNA SculptPreview by John Hurliman. 37 // This functionality based on the XNA SculptPreview by John Hurliman.
39 public class SculptMesh : Mesh 38 public class SculptMesh : Mesh
40 { 39 {
40 ManagedImage managedImage;
41 Image idata = null; 41 Image idata = null;
42 Bitmap bLOD = null; 42 Bitmap bLOD = null;
43 Bitmap bBitmap = null; 43 Bitmap bBitmap = null;
@@ -55,7 +55,7 @@ namespace OpenSim.Region.Physics.Meshing
55 55
56 try 56 try
57 { 57 {
58 idata = OpenJPEG.DecodeToImage(jpegData); 58 OpenJPEG.DecodeToImage(jpegData, out managedImage, out idata);
59 //int i = 0; 59 //int i = 0;
60 //i = i / i; 60 //i = i / i;
61 } 61 }
@@ -64,6 +64,7 @@ namespace OpenSim.Region.Physics.Meshing
64 System.Console.WriteLine("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed!"); 64 System.Console.WriteLine("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed!");
65 return; 65 return;
66 } 66 }
67
67 if (idata != null) 68 if (idata != null)
68 { 69 {
69 bBitmap = new Bitmap(idata); 70 bBitmap = new Bitmap(idata);