From 92d44446faad9fef1ec5008b84bf44ab9398f6a9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 4 Aug 2012 17:33:14 +0100 Subject: [PATCH] *feature test* ubitode, let convex hull shape type work for prims other than uploaded meshs, making it change the mesh level of detail from high to low. This will work on all prims that get a internal mesh or sculpts. Mesh size reduction will depend on particular shape. This is not as SL. There prims do also get concave areas. Uploaded meshs work as before. A normal 10x10x10 torus gets 152 vertices in place of 900, and 198 faces in place of 1198. --- .../Region/Physics/UbitOdePlugin/ODEPrim.cs | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs index 6bf5be1fac..a3534a49b5 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs @@ -1092,18 +1092,21 @@ namespace OpenSim.Region.Physics.OdePlugin CalcPrimBodyData(); m_mesh = null; - if (_parent_scene.needsMeshing(pbs)) + if (_parent_scene.needsMeshing(pbs) && (pbs.SculptData.Length > 0)) { bool convex; + int clod = (int)LevelOfDetail.High; if (m_shapetype == 0) convex = false; else + { convex = true; - - m_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, (int)LevelOfDetail.High, true, convex); + if (_pbs.SculptType != (byte)SculptType.Mesh) + clod = (int)LevelOfDetail.Low; + } + m_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, clod, true, convex); } - m_building = true; // control must set this to false when done AddChange(changes.Add, null); @@ -1360,12 +1363,18 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_mesh == null) { bool convex; + int clod = (int)LevelOfDetail.High; + if (m_shapetype == 0) convex = false; else + { convex = true; + if (_pbs.SculptType != (byte)SculptType.Mesh) + clod = (int)LevelOfDetail.Low; + } - mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, (int)LevelOfDetail.High, true, convex); + mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, clod, true, convex); } else { @@ -1373,7 +1382,7 @@ namespace OpenSim.Region.Physics.OdePlugin } if (mesh == null) - { + { m_log.WarnFormat("[PHYSICS]: CreateMesh Failed on prim {0} at <{1},{2},{3}>.", Name, _position.X, _position.Y, _position.Z); return false; }