* Adds poor support for ellipsis in the Meshmerizer. This will get better.. notice the huge nasty facets! Regular spheres still work as they did.
parent
e679f3eb36
commit
d0f7784101
|
@ -57,7 +57,7 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
// Setting baseDir to a path will enable the dumping of raw files
|
||||
// raw files can be imported by blender so a visual inspection of the results can be done
|
||||
// const string baseDir = "rawFiles";
|
||||
private const string baseDir = null; // "rawFiles";
|
||||
private const string baseDir = null; //"rawFiles";
|
||||
|
||||
// TODO: unused
|
||||
// private static void IntersectionParameterPD(PhysicsVector p1, PhysicsVector r1, PhysicsVector p2,
|
||||
|
@ -204,6 +204,8 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
if (hshape == HollowShape.Same)
|
||||
hshape= HollowShape.Square;
|
||||
|
@ -986,6 +988,105 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
result.DumpRaw(baseDir, primName, "Z extruded");
|
||||
return result;
|
||||
}
|
||||
private static Mesh CreateSphereMesh(String primName, PrimitiveBaseShape primShape, PhysicsVector size)
|
||||
// Builds the z (+ and -) surfaces of a box shaped prim
|
||||
{
|
||||
UInt16 hollowFactor = primShape.ProfileHollow;
|
||||
UInt16 profileBegin = primShape.ProfileBegin;
|
||||
UInt16 profileEnd = primShape.ProfileEnd;
|
||||
UInt16 taperX = primShape.PathScaleX;
|
||||
UInt16 taperY = primShape.PathScaleY;
|
||||
UInt16 pathShearX = primShape.PathShearX;
|
||||
UInt16 pathShearY = primShape.PathShearY;
|
||||
Mesh m = new Mesh();
|
||||
float radius = 0.6f;
|
||||
float sq5 = (float) Math.Sqrt(5.0);
|
||||
float phi = (1 + sq5) * 0.5f;
|
||||
float rat = (float) Math.Sqrt(10f + (2f * sq5)) / (4f * phi);
|
||||
float a = (radius / rat) * 0.5f;
|
||||
float b = (radius / rat) / (2.0f * phi);
|
||||
|
||||
Vertex v1 = new Vertex(0f, b, -a);
|
||||
Vertex v2 = new Vertex(b, a, 0f);
|
||||
Vertex v3 = new Vertex(-b, a, 0f);
|
||||
Vertex v4 = new Vertex(0f, b, a);
|
||||
Vertex v5 = new Vertex(0f, -b, a);
|
||||
Vertex v6 = new Vertex(-a, 0f, b);
|
||||
Vertex v7 = new Vertex(0f, -b, -a);
|
||||
Vertex v8 = new Vertex(a, 0f, -b);
|
||||
Vertex v9 = new Vertex(a, 0f, b);
|
||||
Vertex v10 = new Vertex(-a, 0f, -b);
|
||||
Vertex v11 = new Vertex(b, -a, 0);
|
||||
Vertex v12 = new Vertex(-b, -a, 0);
|
||||
m.Add(v1);
|
||||
m.Add(v2);
|
||||
m.Add(v3);
|
||||
m.Add(v4);
|
||||
m.Add(v5);
|
||||
m.Add(v6);
|
||||
m.Add(v7);
|
||||
m.Add(v8);
|
||||
m.Add(v9);
|
||||
m.Add(v10);
|
||||
m.Add(v11);
|
||||
m.Add(v12);
|
||||
|
||||
Triangle t1 = new Triangle(v1, v2, v3);
|
||||
Triangle t2 = new Triangle(v4, v3, v2);
|
||||
Triangle t3 = new Triangle(v4, v5, v6);
|
||||
Triangle t4 = new Triangle(v4, v9, v5);
|
||||
Triangle t5 = new Triangle(v1, v7, v8);
|
||||
Triangle t6 = new Triangle(v1, v10, v7);
|
||||
Triangle t7 = new Triangle(v5, v11, v12);
|
||||
Triangle t8 = new Triangle(v7, v12, v11);
|
||||
Triangle t9 = new Triangle(v3, v6, v10);
|
||||
Triangle t10 = new Triangle(v12, v10, v6);
|
||||
Triangle t11 = new Triangle(v2, v8, v9);
|
||||
Triangle t12 = new Triangle(v11, v9, v8);
|
||||
Triangle t13 = new Triangle(v4, v6, v3);
|
||||
Triangle t14 = new Triangle(v4, v2, v9);
|
||||
Triangle t15 = new Triangle(v1, v3, v10);
|
||||
Triangle t16 = new Triangle(v1, v8, v2);
|
||||
Triangle t17 = new Triangle(v7, v10, v12);
|
||||
Triangle t18 = new Triangle(v7, v11, v8);
|
||||
Triangle t19 = new Triangle(v5, v12, v6);
|
||||
Triangle t20 = new Triangle(v5, v9, v11);
|
||||
m.Add(t1);
|
||||
m.Add(t2);
|
||||
m.Add(t3);
|
||||
m.Add(t4);
|
||||
m.Add(t5);
|
||||
m.Add(t6);
|
||||
m.Add(t7);
|
||||
m.Add(t8);
|
||||
m.Add(t9);
|
||||
m.Add(t10);
|
||||
m.Add(t11);
|
||||
m.Add(t12);
|
||||
m.Add(t13);
|
||||
m.Add(t14);
|
||||
m.Add(t15);
|
||||
m.Add(t16);
|
||||
m.Add(t17);
|
||||
m.Add(t18);
|
||||
m.Add(t19);
|
||||
m.Add(t20);
|
||||
|
||||
// strechy!
|
||||
foreach (Vertex v in m.vertices)
|
||||
{
|
||||
v.X *= size.X;
|
||||
v.Y *= size.Y;
|
||||
v.Z *= size.Z;
|
||||
}
|
||||
foreach (Triangle t in m.triangles)
|
||||
{
|
||||
t.invertNormal();
|
||||
}
|
||||
m.DumpRaw(baseDir, primName, "Z extruded");
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
public static void CalcNormals(Mesh mesh)
|
||||
{
|
||||
|
@ -1065,6 +1166,14 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
CalcNormals(mesh);
|
||||
}
|
||||
break;
|
||||
case ProfileShape.HalfCircle:
|
||||
if (primShape.PathCurve == (byte)Extrusion.Curve1)
|
||||
{
|
||||
mesh = CreateSphereMesh(primName, primShape, size);
|
||||
CalcNormals(mesh);
|
||||
}
|
||||
break;
|
||||
|
||||
case ProfileShape.EquilateralTriangle:
|
||||
mesh = CreatePrismMesh(primName, primShape, size);
|
||||
CalcNormals(mesh);
|
||||
|
|
|
@ -1449,9 +1449,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
|
||||
if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight)
|
||||
return true;
|
||||
if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1 && (pbs.Scale.X != pbs.Scale.Y || pbs.Scale.Y != pbs.Scale.Z || pbs.Scale.Z != pbs.Scale.X))
|
||||
return true;
|
||||
|
||||
if (pbs.ProfileShape == ProfileShape.EquilateralTriangle)
|
||||
return true;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue