diff options
Diffstat (limited to 'OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs')
-rw-r--r-- | OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs index 3a944d1..0d4b6b9 100644 --- a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs +++ b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs | |||
@@ -44,7 +44,7 @@ using log4net; | |||
44 | using Nini.Config; | 44 | using Nini.Config; |
45 | using Mono.Addins; | 45 | using Mono.Addins; |
46 | 46 | ||
47 | namespace OpenSim.Region.PhysicsModules.Meshing | 47 | namespace OpenSim.Region.PhysicsModule.Meshing |
48 | { | 48 | { |
49 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "Meshmerizer")] | 49 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "Meshmerizer")] |
50 | public class Meshmerizer : IMesher, INonSharedRegionModule | 50 | public class Meshmerizer : IMesher, INonSharedRegionModule |
@@ -66,7 +66,7 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
66 | 66 | ||
67 | private bool cacheSculptMaps = true; | 67 | private bool cacheSculptMaps = true; |
68 | private string decodedSculptMapPath = null; | 68 | private string decodedSculptMapPath = null; |
69 | private bool useMeshiesPhysicsMesh = false; | 69 | private bool useMeshiesPhysicsMesh = true; |
70 | 70 | ||
71 | private float minSizeForComplexMesh = 0.2f; // prims with all dimensions smaller than this will have a bounding box mesh | 71 | private float minSizeForComplexMesh = 0.2f; // prims with all dimensions smaller than this will have a bounding box mesh |
72 | 72 | ||
@@ -99,7 +99,7 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
99 | 99 | ||
100 | IConfig mesh_config = source.Configs["Mesh"]; | 100 | IConfig mesh_config = source.Configs["Mesh"]; |
101 | 101 | ||
102 | decodedSculptMapPath = "../caches/" + config.GetString("DecodedSculptMapPath", "j2kDecodeCache"); | 102 | decodedSculptMapPath = config.GetString("DecodedSculptMapPath", "j2kDecodeCache"); |
103 | cacheSculptMaps = config.GetBoolean("CacheSculptMaps", cacheSculptMaps); | 103 | cacheSculptMaps = config.GetBoolean("CacheSculptMaps", cacheSculptMaps); |
104 | if (mesh_config != null) | 104 | if (mesh_config != null) |
105 | { | 105 | { |
@@ -247,13 +247,13 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
247 | private void AddSubMesh(OSDMap subMeshData, Vector3 size, List<Coord> coords, List<Face> faces) | 247 | private void AddSubMesh(OSDMap subMeshData, Vector3 size, List<Coord> coords, List<Face> faces) |
248 | { | 248 | { |
249 | // Console.WriteLine("subMeshMap for {0} - {1}", primName, Util.GetFormattedXml((OSD)subMeshMap)); | 249 | // Console.WriteLine("subMeshMap for {0} - {1}", primName, Util.GetFormattedXml((OSD)subMeshMap)); |
250 | 250 | ||
251 | // As per http://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format, some Mesh Level | 251 | // As per http://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format, some Mesh Level |
252 | // of Detail Blocks (maps) contain just a NoGeometry key to signal there is no | 252 | // of Detail Blocks (maps) contain just a NoGeometry key to signal there is no |
253 | // geometry for this submesh. | 253 | // geometry for this submesh. |
254 | if (subMeshData.ContainsKey("NoGeometry") && ((OSDBoolean)subMeshData["NoGeometry"])) | 254 | if (subMeshData.ContainsKey("NoGeometry") && ((OSDBoolean)subMeshData["NoGeometry"])) |
255 | return; | 255 | return; |
256 | 256 | ||
257 | OpenMetaverse.Vector3 posMax = ((OSDMap)subMeshData["PositionDomain"])["Max"].AsVector3(); | 257 | OpenMetaverse.Vector3 posMax = ((OSDMap)subMeshData["PositionDomain"])["Max"].AsVector3(); |
258 | OpenMetaverse.Vector3 posMin = ((OSDMap)subMeshData["PositionDomain"])["Min"].AsVector3(); | 258 | OpenMetaverse.Vector3 posMin = ((OSDMap)subMeshData["PositionDomain"])["Min"].AsVector3(); |
259 | ushort faceIndexOffset = (ushort)coords.Count; | 259 | ushort faceIndexOffset = (ushort)coords.Count; |
@@ -264,15 +264,15 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
264 | ushort uX = Utils.BytesToUInt16(posBytes, i); | 264 | ushort uX = Utils.BytesToUInt16(posBytes, i); |
265 | ushort uY = Utils.BytesToUInt16(posBytes, i + 2); | 265 | ushort uY = Utils.BytesToUInt16(posBytes, i + 2); |
266 | ushort uZ = Utils.BytesToUInt16(posBytes, i + 4); | 266 | ushort uZ = Utils.BytesToUInt16(posBytes, i + 4); |
267 | 267 | ||
268 | Coord c = new Coord( | 268 | Coord c = new Coord( |
269 | Utils.UInt16ToFloat(uX, posMin.X, posMax.X) * size.X, | 269 | Utils.UInt16ToFloat(uX, posMin.X, posMax.X) * size.X, |
270 | Utils.UInt16ToFloat(uY, posMin.Y, posMax.Y) * size.Y, | 270 | Utils.UInt16ToFloat(uY, posMin.Y, posMax.Y) * size.Y, |
271 | Utils.UInt16ToFloat(uZ, posMin.Z, posMax.Z) * size.Z); | 271 | Utils.UInt16ToFloat(uZ, posMin.Z, posMax.Z) * size.Z); |
272 | 272 | ||
273 | coords.Add(c); | 273 | coords.Add(c); |
274 | } | 274 | } |
275 | 275 | ||
276 | byte[] triangleBytes = subMeshData["TriangleList"].AsBinary(); | 276 | byte[] triangleBytes = subMeshData["TriangleList"].AsBinary(); |
277 | for (int i = 0; i < triangleBytes.Length; i += 6) | 277 | for (int i = 0; i < triangleBytes.Length; i += 6) |
278 | { | 278 | { |
@@ -436,9 +436,9 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
436 | int convexSize = convexBlock["size"].AsInteger(); | 436 | int convexSize = convexBlock["size"].AsInteger(); |
437 | 437 | ||
438 | byte[] convexBytes = new byte[convexSize]; | 438 | byte[] convexBytes = new byte[convexSize]; |
439 | 439 | ||
440 | System.Buffer.BlockCopy(primShape.SculptData, convexOffset, convexBytes, 0, convexSize); | 440 | System.Buffer.BlockCopy(primShape.SculptData, convexOffset, convexBytes, 0, convexSize); |
441 | 441 | ||
442 | try | 442 | try |
443 | { | 443 | { |
444 | convexBlockOsd = DecompressOsd(convexBytes); | 444 | convexBlockOsd = DecompressOsd(convexBytes); |
@@ -449,7 +449,7 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
449 | //return false; | 449 | //return false; |
450 | } | 450 | } |
451 | } | 451 | } |
452 | 452 | ||
453 | if (convexBlockOsd != null && convexBlockOsd is OSDMap) | 453 | if (convexBlockOsd != null && convexBlockOsd is OSDMap) |
454 | { | 454 | { |
455 | convexBlock = convexBlockOsd as OSDMap; | 455 | convexBlock = convexBlockOsd as OSDMap; |
@@ -762,7 +762,7 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
762 | { | 762 | { |
763 | PrimMesh primMesh; | 763 | PrimMesh primMesh; |
764 | coords = new List<Coord>(); | 764 | coords = new List<Coord>(); |
765 | faces = new List<Face>(); | 765 | faces = new List<Face>(); |
766 | 766 | ||
767 | float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f; | 767 | float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f; |
768 | float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f; | 768 | float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f; |
@@ -947,11 +947,21 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
947 | return CreateMesh(primName, primShape, size, lod, false, true); | 947 | return CreateMesh(primName, primShape, size, lod, false, true); |
948 | } | 948 | } |
949 | 949 | ||
950 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache, bool convex, bool forOde) | ||
951 | { | ||
952 | return CreateMesh(primName, primShape, size, lod, false); | ||
953 | } | ||
954 | |||
950 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) | 955 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) |
951 | { | 956 | { |
952 | return CreateMesh(primName, primShape, size, lod, isPhysical, true); | 957 | return CreateMesh(primName, primShape, size, lod, isPhysical, true); |
953 | } | 958 | } |
954 | 959 | ||
960 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex, bool forOde) | ||
961 | { | ||
962 | return CreateMesh(primName, primShape, size, lod, isPhysical, true); | ||
963 | } | ||
964 | |||
955 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache) | 965 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache) |
956 | { | 966 | { |
957 | #if SPAM | 967 | #if SPAM |
@@ -984,7 +994,7 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
984 | if ((!isPhysical) && size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh) | 994 | if ((!isPhysical) && size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh) |
985 | { | 995 | { |
986 | #if SPAM | 996 | #if SPAM |
987 | m_log.Debug("Meshmerizer: prim " + primName + " has a size of " + size.ToString() + " which is below threshold of " + | 997 | m_log.Debug("Meshmerizer: prim " + primName + " has a size of " + size.ToString() + " which is below threshold of " + |
988 | minSizeForComplexMesh.ToString() + " - creating simple bounding box"); | 998 | minSizeForComplexMesh.ToString() + " - creating simple bounding box"); |
989 | #endif | 999 | #endif |
990 | mesh = CreateBoundingBoxMesh(mesh); | 1000 | mesh = CreateBoundingBoxMesh(mesh); |
@@ -1005,6 +1015,13 @@ namespace OpenSim.Region.PhysicsModules.Meshing | |||
1005 | 1015 | ||
1006 | return mesh; | 1016 | return mesh; |
1007 | } | 1017 | } |
1018 | public IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex) | ||
1019 | { | ||
1020 | return null; | ||
1021 | } | ||
1008 | 1022 | ||
1023 | public void ReleaseMesh(IMesh imesh) { } | ||
1024 | public void ExpireReleaseMeshs() { } | ||
1025 | public void ExpireFileCache() { } | ||
1009 | } | 1026 | } |
1010 | } | 1027 | } |