ConvexDecomposition remove a copy of vertices not needed for ubOde
parent
ea686058c9
commit
d9572bdf4e
|
@ -1094,7 +1094,7 @@ namespace OpenSim.Region.PhysicsModules.ConvexDecompositionDotNet
|
|||
return m;
|
||||
}
|
||||
|
||||
for (int i = m; i < count; i++)
|
||||
for (int i = m + 1; i < count; i++)
|
||||
{
|
||||
if (allow[i] != 0)
|
||||
{
|
||||
|
@ -1540,6 +1540,19 @@ namespace OpenSim.Region.PhysicsModules.ConvexDecompositionDotNet
|
|||
}
|
||||
}
|
||||
|
||||
public static bool ComputeHull(List<float3> vertices, out List<int> indices)
|
||||
{
|
||||
List<HullTriangle> tris = new List<HullTriangle>();
|
||||
|
||||
bool ret = calchull(vertices, out indices, 0, tris);
|
||||
if (ret == false)
|
||||
{
|
||||
indices = new List<int>();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool CleanupVertices(List<float3> svertices, out List<float3> vertices, float normalepsilon, out float3 scale)
|
||||
{
|
||||
const float EPSILON = 0.000001f;
|
||||
|
|
|
@ -619,7 +619,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
vs.Clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
if (!HullUtils.ComputeHull(vs, ref hullr, 0, 0.0f))
|
||||
{
|
||||
vs.Clear();
|
||||
|
@ -657,6 +657,45 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
f = new Face(vertsoffset + t1, vertsoffset + t2, vertsoffset + t3);
|
||||
faces.Add(f);
|
||||
}
|
||||
*/
|
||||
List<int> indices;
|
||||
if (!HullUtils.ComputeHull(vs, out indices))
|
||||
{
|
||||
vs.Clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
nverts = vs.Count;
|
||||
nindexs = indices.Count;
|
||||
|
||||
if (nindexs % 3 != 0)
|
||||
{
|
||||
vs.Clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
for (i = 0; i < nverts; i++)
|
||||
{
|
||||
c.X = vs[i].x;
|
||||
c.Y = vs[i].y;
|
||||
c.Z = vs[i].z;
|
||||
coords.Add(c);
|
||||
}
|
||||
|
||||
for (i = 0; i < nindexs; i += 3)
|
||||
{
|
||||
t1 = indices[i];
|
||||
if (t1 > nverts)
|
||||
break;
|
||||
t2 = indices[i + 1];
|
||||
if (t2 > nverts)
|
||||
break;
|
||||
t3 = indices[i + 2];
|
||||
if (t3 > nverts)
|
||||
break;
|
||||
f = new Face(vertsoffset + t1, vertsoffset + t2, vertsoffset + t3);
|
||||
faces.Add(f);
|
||||
}
|
||||
vertsoffset += nverts;
|
||||
vs.Clear();
|
||||
}
|
||||
|
@ -686,13 +725,15 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
vs.Add(f3);
|
||||
}
|
||||
|
||||
if (vs.Count < 3)
|
||||
nverts = vs.Count;
|
||||
|
||||
if (nverts < 3)
|
||||
{
|
||||
vs.Clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (vs.Count < 5)
|
||||
if (nverts < 5)
|
||||
{
|
||||
foreach (float3 point in vs)
|
||||
{
|
||||
|
@ -701,10 +742,11 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
c.Z = point.z;
|
||||
coords.Add(c);
|
||||
}
|
||||
|
||||
f = new Face(0, 1, 2);
|
||||
faces.Add(f);
|
||||
|
||||
if (vs.Count == 4)
|
||||
if (nverts == 4)
|
||||
{
|
||||
f = new Face(0, 2, 3);
|
||||
faces.Add(f);
|
||||
|
@ -716,7 +758,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
vs.Clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
if (!HullUtils.ComputeHull(vs, ref hullr, 0, 0.0f))
|
||||
return false;
|
||||
|
||||
|
@ -747,7 +789,38 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
|
|||
f = new Face(t1, t2, t3);
|
||||
faces.Add(f);
|
||||
}
|
||||
*/
|
||||
List<int> indices;
|
||||
if (!HullUtils.ComputeHull(vs, out indices))
|
||||
return false;
|
||||
|
||||
nindexs = indices.Count;
|
||||
|
||||
if (nindexs % 3 != 0)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < nverts; i++)
|
||||
{
|
||||
c.X = vs[i].x;
|
||||
c.Y = vs[i].y;
|
||||
c.Z = vs[i].z;
|
||||
coords.Add(c);
|
||||
}
|
||||
for (i = 0; i < nindexs; i += 3)
|
||||
{
|
||||
t1 = indices[i];
|
||||
if (t1 > nverts)
|
||||
break;
|
||||
t2 = indices[i + 1];
|
||||
if (t2 > nverts)
|
||||
break;
|
||||
t3 = indices[i + 2];
|
||||
if (t3 > nverts)
|
||||
break;
|
||||
f = new Face(t1, t2, t3);
|
||||
faces.Add(f);
|
||||
}
|
||||
vs.Clear();
|
||||
if (coords.Count > 0 && faces.Count > 0)
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue