From 7d89e122930be39e84a6d174548fa2d12ac0484a Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Sat, 6 Sep 2008 07:52:41 +0000 Subject: * This is the fabled LibOMV update with all of the libOMV types from JHurliman * This is a HUGE OMG update and will definitely have unknown side effects.. so this is really only for the strong hearted at this point. Regular people should let the dust settle. * This has been tested to work with most basic functions. However.. make sure you back up 'everything' before using this. It's that big! * Essentially we're back at square 1 in the testing phase.. so lets identify things that broke. --- OpenSim/Region/Physics/Meshing/Extruder.cs | 13 +-- OpenSim/Region/Physics/Meshing/HelperTypes.cs | 110 ++++++-------------------- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 3 +- OpenSim/Region/Physics/Meshing/PrimMesher.cs | 11 +-- OpenSim/Region/Physics/Meshing/SculptMesh.cs | 7 +- 5 files changed, 41 insertions(+), 103 deletions(-) (limited to 'OpenSim/Region/Physics/Meshing') 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 @@ */ //#define SPAM +using OpenMetaverse; using OpenSim.Region.Physics.Manager; namespace OpenSim.Region.Physics.Meshing @@ -72,9 +73,6 @@ namespace OpenSim.Region.Physics.Meshing { Mesh result = new Mesh(); - // Quaternion tt = new Quaternion(); - // Vertex v2 = new Vertex(0, 0, 0); - Mesh newLayer; Mesh lastLayer = null; @@ -163,7 +161,7 @@ namespace OpenSim.Region.Physics.Meshing // apply twist rotation to the profile layer and position the layer in the prim - Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); + Quaternion profileRot = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist); foreach (Vertex v in newLayer.vertices) { if (v != null) @@ -259,9 +257,6 @@ namespace OpenSim.Region.Physics.Meshing { Mesh result = new Mesh(); - // Quaternion tt = new Quaternion(); - // Vertex v2 = new Vertex(0, 0, 0); - Mesh newLayer; Mesh lastLayer = null; @@ -377,7 +372,7 @@ namespace OpenSim.Region.Physics.Meshing // next apply twist rotation to the profile layer if (twistTotal != 0.0f || twistBot != 0.0f) { - Quaternion profileRot = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist); + Quaternion profileRot = new Quaternion(new Vector3(0.0f, 0.0f, 1.0f), twist); foreach (Vertex v in newLayer.vertices) { if (v != null) @@ -392,7 +387,7 @@ namespace OpenSim.Region.Physics.Meshing // now orient the rotation of the profile layer relative to it's position on the path // adding pushY to the angle used to generate the quat appears to approximate the viewer - Quaternion layerRot = new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f); + Quaternion layerRot = Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), (float)angle + pushY * 0.9f); foreach (Vertex v in newLayer.vertices) { 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; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; +using OpenMetaverse; using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Meshing; -public class Quaternion -{ - public float x = 0; - public float y = 0; - public float z = 0; - public float w = 1; - - public Quaternion() - { - - } - public Quaternion(float x1, float y1, float z1, float w1) - { - x = x1; y = y1; z = z1; w = w1; - } - public Quaternion(Vertex axis, float angle) - { - // using (* 0.5) instead of (/2) - w = (float)Math.Cos(angle * 0.5f); - float sin = (float)Math.Sin(angle * 0.5f); - //x = axis.X * (float)Math.Sin(angle * 0.5f); - //y = axis.Y * (float)Math.Sin(angle * 0.5f); - //z = axis.Z * (float)Math.Sin(angle * 0.5f); - x = axis.X * sin; - y = axis.Y * sin; - z = axis.Z * sin; - normalize(); - } - public static Quaternion operator *(Quaternion a, Quaternion b) - { - Quaternion c = new Quaternion(); - c.x = a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y; - c.y = a.w * b.y + a.y * b.w + a.z * b.x - a.x * b.z; - c.z = a.w * b.z + a.z * b.w + a.x * b.y - a.y * b.x; - c.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z; - return c; - } - - public void normalize() - { - //float mag = length(); - - //w /= mag; - //x /= mag; - //y /= mag; - //z /= mag; - float iMag = 1.0f / length(); - - w *= iMag; - x *= iMag; - y *= iMag; - z *= iMag; - } - public float length() - { - return (float)Math.Sqrt(w * w + x * x + y * y + z * z); - } -} - - - public class Vertex : PhysicsVector, IComparable { public Vertex(float x, float y, float z) @@ -129,34 +69,34 @@ public class Vertex : PhysicsVector, IComparable Vertex v2 = new Vertex(0f, 0f, 0f); - v2.X = q.w * q.w * v.X + - 2f * q.y * q.w * v.Z - - 2f * q.z * q.w * v.Y + - q.x * q.x * v.X + - 2f * q.y * q.x * v.Y + - 2f * q.z * q.x * v.Z - - q.z * q.z * v.X - - q.y * q.y * v.X; + v2.X = q.W * q.W * v.X + + 2f * q.Y * q.W * v.Z - + 2f * q.Z * q.W * v.Y + + q.X * q.X * v.X + + 2f * q.Y * q.X * v.Y + + 2f * q.Z * q.X * v.Z - + q.Z * q.Z * v.X - + q.Y * q.Y * v.X; v2.Y = - 2f * q.x * q.y * v.X + - q.y * q.y * v.Y + - 2f * q.z * q.y * v.Z + - 2f * q.w * q.z * v.X - - q.z * q.z * v.Y + - q.w * q.w * v.Y - - 2f * q.x * q.w * v.Z - - q.x * q.x * v.Y; + 2f * q.X * q.Y * v.X + + q.Y * q.Y * v.Y + + 2f * q.Z * q.Y * v.Z + + 2f * q.W * q.Z * v.X - + q.Z * q.Z * v.Y + + q.W * q.W * v.Y - + 2f * q.X * q.W * v.Z - + q.X * q.X * v.Y; v2.Z = - 2f * q.x * q.z * v.X + - 2f * q.y * q.z * v.Y + - q.z * q.z * v.Z - - 2f * q.w * q.y * v.X - - q.y * q.y * v.Z + - 2f * q.w * q.x * v.Y - - q.x * q.x * v.Z + - q.w * q.w * v.Z; + 2f * q.X * q.Z * v.X + + 2f * q.Y * q.Z * v.Y + + q.Z * q.Z * v.Z - + 2f * q.W * q.Y * v.X - + q.Y * q.Y * v.Z + + 2f * q.W * q.X * v.Y - + q.X * q.X * v.Z + + q.W * q.W * v.Z; return v2; } 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; using System.Collections.Generic; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; +using OpenMetaverse; namespace OpenSim.Region.Physics.Meshing { @@ -1559,7 +1560,7 @@ namespace OpenSim.Region.Physics.Meshing if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle) { - Quaternion zFlip = new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), (float)Math.PI); + Quaternion zFlip = Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), (float)Math.PI); Vertex vTmp = new Vertex(0.0f, 0.0f, 0.0f); foreach (Vertex v in cuttedHull.getVertices()) 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; using System.Collections.Generic; using System.IO; using OpenSim.Region.Physics.Manager; +using OpenMetaverse; namespace OpenSim.Region.Physics.Meshing { @@ -783,7 +784,7 @@ angles24 = [ Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); if (initialProfileRot != 0.0f) - profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); + profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot)); bool done = false; while (!done) @@ -807,7 +808,7 @@ angles24 = [ float twist = twistBegin + twistTotal * percentOfPath; if (twist != 0.0f) - newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist)); newLayer.AddPos(xOffset, yOffset, zOffset); @@ -948,7 +949,7 @@ angles24 = [ Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); if (initialProfileRot != 0.0f) - profile.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), initialProfileRot)); + profile.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), initialProfileRot)); bool done = false; while (!done) // loop through the length of the path and add the layers @@ -991,12 +992,12 @@ angles24 = [ // next apply twist rotation to the profile layer if (twistTotal != 0.0f || twistBegin != 0.0f) - newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), twist)); // now orient the rotation of the profile layer relative to it's position on the path // adding taperY to the angle used to generate the quat appears to approximate the viewer //newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f)); - newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY)); + newLayer.AddRot(Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), angle + this.topShearY)); newLayer.AddPos(xOffset, yOffset, zOffset); 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; using System.Drawing; using System.Drawing.Imaging; using System.Text; -using OpenJPEGNet; -using Image = System.Drawing.Image; +using OpenMetaverse.Imaging; namespace OpenSim.Region.Physics.Meshing { // This functionality based on the XNA SculptPreview by John Hurliman. public class SculptMesh : Mesh { + ManagedImage managedImage; Image idata = null; Bitmap bLOD = null; Bitmap bBitmap = null; @@ -55,7 +55,7 @@ namespace OpenSim.Region.Physics.Meshing try { - idata = OpenJPEG.DecodeToImage(jpegData); + OpenJPEG.DecodeToImage(jpegData, out managedImage, out idata); //int i = 0; //i = i / i; } @@ -64,6 +64,7 @@ namespace OpenSim.Region.Physics.Meshing System.Console.WriteLine("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed!"); return; } + if (idata != null) { bBitmap = new Bitmap(idata); -- cgit v1.1