some sorely needed extruder code simplification and refactoring, also some fixes to cut face UV coordinates
parent
1342e89a8f
commit
ae5d92a167
|
@ -339,12 +339,6 @@ namespace PrimMesher
|
||||||
Coord edge1 = new Coord(this.n2.X - this.n1.X, this.n2.Y - this.n1.Y, this.n2.Z - this.n1.Z);
|
Coord edge1 = new Coord(this.n2.X - this.n1.X, this.n2.Y - this.n1.Y, this.n2.Z - this.n1.Z);
|
||||||
Coord edge2 = new Coord(this.n3.X - this.n1.X, this.n3.Y - this.n1.Y, this.n3.Z - this.n1.Z);
|
Coord edge2 = new Coord(this.n3.X - this.n1.X, this.n3.Y - this.n1.Y, this.n3.Z - this.n1.Z);
|
||||||
|
|
||||||
//Coord normal = Coord.Cross(edge1, edge2).Normalize();
|
|
||||||
|
|
||||||
//this.n1 = normal;
|
|
||||||
//this.n2 = normal;
|
|
||||||
//this.n3 = normal;
|
|
||||||
|
|
||||||
this.n1 = this.n2 = this.n3 = Coord.Cross(edge1, edge2).Normalize();
|
this.n1 = this.n2 = this.n3 = Coord.Cross(edge1, edge2).Normalize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -573,7 +567,6 @@ namespace PrimMesher
|
||||||
List<Coord> hollowNormals = new List<Coord>();
|
List<Coord> hollowNormals = new List<Coord>();
|
||||||
List<float> hollowUs = new List<float>();
|
List<float> hollowUs = new List<float>();
|
||||||
|
|
||||||
//Quat rot180 = new Quat(new Coord(0.0f, 0.0f, 1.0f), (float)Math.PI); ;
|
|
||||||
bool hasHollow = (hollow > 0.0f);
|
bool hasHollow = (hollow > 0.0f);
|
||||||
|
|
||||||
bool hasProfileCut = (profileStart > 0.0f || profileEnd < 1.0f);
|
bool hasProfileCut = (profileStart > 0.0f || profileEnd < 1.0f);
|
||||||
|
@ -591,7 +584,6 @@ namespace PrimMesher
|
||||||
|
|
||||||
float startAngle = profileStart * twoPi;
|
float startAngle = profileStart * twoPi;
|
||||||
float stopAngle = profileEnd * twoPi;
|
float stopAngle = profileEnd * twoPi;
|
||||||
// float stepSize = twoPi / sides;
|
|
||||||
|
|
||||||
try { angles.makeAngles(sides, startAngle, stopAngle); }
|
try { angles.makeAngles(sides, startAngle, stopAngle); }
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -625,8 +617,9 @@ namespace PrimMesher
|
||||||
else if (!simpleFace)
|
else if (!simpleFace)
|
||||||
{
|
{
|
||||||
this.coords.Add(center);
|
this.coords.Add(center);
|
||||||
if (this.calcVertexNormals)// && sides > 4)
|
if (this.calcVertexNormals)
|
||||||
this.vertexNormals.Add(new Coord(0.0f, 0.0f, 1.0f));
|
this.vertexNormals.Add(new Coord(0.0f, 0.0f, 1.0f));
|
||||||
|
this.us.Add(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float z = 0.0f;
|
float z = 0.0f;
|
||||||
|
@ -646,9 +639,6 @@ namespace PrimMesher
|
||||||
hollowCoords.Add(newVert);
|
hollowCoords.Add(newVert);
|
||||||
if (this.calcVertexNormals)
|
if (this.calcVertexNormals)
|
||||||
{
|
{
|
||||||
//Coord hollowNormal = new Coord(angle.X, angle.Y, 0.0f);
|
|
||||||
//hollowNormal *= rot180;
|
|
||||||
//hollowNormals.Add(hollowNormal);
|
|
||||||
hollowNormals.Add(new Coord(-angle.X, -angle.Y, 0.0f));
|
hollowNormals.Add(new Coord(-angle.X, -angle.Y, 0.0f));
|
||||||
hollowUs.Add(angle.angle);
|
hollowUs.Add(angle.angle);
|
||||||
}
|
}
|
||||||
|
@ -658,8 +648,6 @@ namespace PrimMesher
|
||||||
int index = 0;
|
int index = 0;
|
||||||
int numAngles = angles.angles.Count;
|
int numAngles = angles.angles.Count;
|
||||||
|
|
||||||
//float sideIncrement = 1.0f / (float)sides;
|
|
||||||
|
|
||||||
for (int i = 0; i < numAngles; i++)
|
for (int i = 0; i < numAngles; i++)
|
||||||
{
|
{
|
||||||
angle = angles.angles[i];
|
angle = angles.angles[i];
|
||||||
|
@ -673,8 +661,6 @@ namespace PrimMesher
|
||||||
if (sides < 5)
|
if (sides < 5)
|
||||||
{
|
{
|
||||||
float u = angle.angle;
|
float u = angle.angle;
|
||||||
//u %= sideIncrement;
|
|
||||||
//u *= sides;
|
|
||||||
this.us.Add(u);
|
this.us.Add(u);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -691,9 +677,6 @@ namespace PrimMesher
|
||||||
hollowCoords.Add(newVert);
|
hollowCoords.Add(newVert);
|
||||||
if (this.calcVertexNormals)
|
if (this.calcVertexNormals)
|
||||||
{
|
{
|
||||||
//Coord hollowNormal = new Coord(angle.X, angle.Y, 0.0f);
|
|
||||||
//hollowNormal *= rot180;
|
|
||||||
//hollowNormals.Add(hollowNormal);
|
|
||||||
hollowNormals.Add(new Coord(-angle.X, -angle.Y, 0.0f));
|
hollowNormals.Add(new Coord(-angle.X, -angle.Y, 0.0f));
|
||||||
hollowUs.Add(angle.angle);
|
hollowUs.Add(angle.angle);
|
||||||
}
|
}
|
||||||
|
@ -976,16 +959,11 @@ namespace PrimMesher
|
||||||
this.faceNormal.Y = -this.faceNormal.Y;
|
this.faceNormal.Y = -this.faceNormal.Y;
|
||||||
this.faceNormal.Z = -this.faceNormal.Z;
|
this.faceNormal.Z = -this.faceNormal.Z;
|
||||||
|
|
||||||
//int numUs = this.us.Count;
|
|
||||||
//for (int i = 0; i < numUs; i++)
|
|
||||||
// this.us[i]
|
|
||||||
|
|
||||||
int numfaceUVs = this.faceUVs.Count;
|
int numfaceUVs = this.faceUVs.Count;
|
||||||
for (i = 0; i < numfaceUVs; i++)
|
for (i = 0; i < numfaceUVs; i++)
|
||||||
{
|
{
|
||||||
UVCoord uv = this.faceUVs[i];
|
UVCoord uv = this.faceUVs[i];
|
||||||
uv.U = 1.0f - uv.U;
|
uv.U = 1.0f - uv.U;
|
||||||
//uv.V = 1.0f - uv.V;
|
|
||||||
this.faceUVs[i] = uv;
|
this.faceUVs[i] = uv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1077,6 +1055,7 @@ namespace PrimMesher
|
||||||
public int stepsPerRevolution = 24;
|
public int stepsPerRevolution = 24;
|
||||||
|
|
||||||
private bool hasProfileCut = false;
|
private bool hasProfileCut = false;
|
||||||
|
private bool hasHollow = false;
|
||||||
public bool calcVertexNormals = false;
|
public bool calcVertexNormals = false;
|
||||||
private bool normalsProcessed = false;
|
private bool normalsProcessed = false;
|
||||||
public bool viewerMode = false;
|
public bool viewerMode = false;
|
||||||
|
@ -1139,6 +1118,7 @@ namespace PrimMesher
|
||||||
this.hollow = 0.0f;
|
this.hollow = 0.0f;
|
||||||
|
|
||||||
this.hasProfileCut = (this.profileStart > 0.0f || this.profileEnd < 1.0f);
|
this.hasProfileCut = (this.profileStart > 0.0f || this.profileEnd < 1.0f);
|
||||||
|
this.hasHollow = (this.hollow > 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExtrudeLinear()
|
public void ExtrudeLinear()
|
||||||
|
@ -1216,6 +1196,14 @@ namespace PrimMesher
|
||||||
|
|
||||||
Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides, true, calcVertexNormals);
|
Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides, true, calcVertexNormals);
|
||||||
|
|
||||||
|
int cut1Vert = -1;
|
||||||
|
int cut2Vert = -1;
|
||||||
|
if (hasProfileCut)
|
||||||
|
{
|
||||||
|
cut1Vert = hasHollow ? profile.coords.Count - 1 : 0;
|
||||||
|
cut2Vert = hasHollow ? profile.numOuterVerts - 1 : profile.numOuterVerts;
|
||||||
|
}
|
||||||
|
|
||||||
if (initialProfileRot != 0.0f)
|
if (initialProfileRot != 0.0f)
|
||||||
{
|
{
|
||||||
profile.AddRot(new Quat(new Coord(0.0f, 0.0f, 1.0f), initialProfileRot));
|
profile.AddRot(new Quat(new Coord(0.0f, 0.0f, 1.0f), initialProfileRot));
|
||||||
|
@ -1308,22 +1296,26 @@ namespace PrimMesher
|
||||||
if (step > 0)
|
if (step > 0)
|
||||||
{
|
{
|
||||||
int startVert = coordsLen + 1;
|
int startVert = coordsLen + 1;
|
||||||
int endVert = this.coords.Count - 1;
|
int endVert = this.coords.Count;
|
||||||
|
|
||||||
if (sides < 5 || this.hasProfileCut || hollow > 0.0f)
|
if (sides < 5 || this.hasProfileCut || hollow > 0.0f)
|
||||||
startVert--;
|
startVert--;
|
||||||
|
|
||||||
for (int i = startVert; i < endVert; i++)
|
for (int i = startVert; i < endVert; i++)
|
||||||
{
|
{
|
||||||
|
int iNext = i + 1;
|
||||||
|
if (i == endVert - 1)
|
||||||
|
iNext = startVert;
|
||||||
|
|
||||||
int whichVert = i - startVert;
|
int whichVert = i - startVert;
|
||||||
|
|
||||||
newFace.v1 = i;
|
newFace.v1 = i;
|
||||||
newFace.v2 = i - numVerts;
|
newFace.v2 = i - numVerts;
|
||||||
newFace.v3 = i - numVerts + 1;
|
newFace.v3 = iNext - numVerts;
|
||||||
this.faces.Add(newFace);
|
this.faces.Add(newFace);
|
||||||
|
|
||||||
newFace.v2 = i - numVerts + 1;
|
newFace.v2 = iNext - numVerts;
|
||||||
newFace.v3 = i + 1;
|
newFace.v3 = iNext;
|
||||||
this.faces.Add(newFace);
|
this.faces.Add(newFace);
|
||||||
|
|
||||||
if (this.viewerMode)
|
if (this.viewerMode)
|
||||||
|
@ -1346,12 +1338,16 @@ namespace PrimMesher
|
||||||
u2 -= whichVert;
|
u2 -= whichVert;
|
||||||
if (u2 < 0.1f)
|
if (u2 < 0.1f)
|
||||||
u2 = 1.0f;
|
u2 = 1.0f;
|
||||||
//u1 = 0.0f;
|
|
||||||
//u2 = 1.0f;
|
|
||||||
|
|
||||||
newViewerFace2.primFaceNumber = newViewerFace1.primFaceNumber = whichVert + 1;
|
newViewerFace2.primFaceNumber = newViewerFace1.primFaceNumber = whichVert + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (whichVert == cut1Vert || whichVert == cut2Vert)
|
||||||
|
{
|
||||||
|
u1 = 0.0f;
|
||||||
|
u2 = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
newViewerFace1.uv1.U = u1;
|
newViewerFace1.uv1.U = u1;
|
||||||
newViewerFace1.uv2.U = u1;
|
newViewerFace1.uv2.U = u1;
|
||||||
newViewerFace1.uv3.U = u2;
|
newViewerFace1.uv3.U = u2;
|
||||||
|
@ -1370,13 +1366,13 @@ namespace PrimMesher
|
||||||
|
|
||||||
newViewerFace1.v1 = this.coords[i];
|
newViewerFace1.v1 = this.coords[i];
|
||||||
newViewerFace1.v2 = this.coords[i - numVerts];
|
newViewerFace1.v2 = this.coords[i - numVerts];
|
||||||
newViewerFace1.v3 = this.coords[i - numVerts + 1];
|
newViewerFace1.v3 = this.coords[iNext - numVerts];
|
||||||
|
|
||||||
newViewerFace2.v1 = this.coords[i];
|
newViewerFace2.v1 = this.coords[i];
|
||||||
newViewerFace2.v2 = this.coords[i - numVerts + 1];
|
newViewerFace2.v2 = this.coords[iNext - numVerts];
|
||||||
newViewerFace2.v3 = this.coords[i + 1];
|
newViewerFace2.v3 = this.coords[iNext];
|
||||||
|
|
||||||
if (whichVert == newLayer.numOuterVerts - 1 && hasProfileCut)
|
if (whichVert == cut1Vert)
|
||||||
{ // start profile cut faces
|
{ // start profile cut faces
|
||||||
|
|
||||||
newViewerFace1.n2 = newViewerFace1.n1 = lastCutNormal1;
|
newViewerFace1.n2 = newViewerFace1.n1 = lastCutNormal1;
|
||||||
|
@ -1397,11 +1393,11 @@ namespace PrimMesher
|
||||||
{
|
{
|
||||||
newViewerFace1.n1 = this.normals[i];
|
newViewerFace1.n1 = this.normals[i];
|
||||||
newViewerFace1.n2 = this.normals[i - numVerts];
|
newViewerFace1.n2 = this.normals[i - numVerts];
|
||||||
newViewerFace1.n3 = this.normals[i - numVerts + 1];
|
newViewerFace1.n3 = this.normals[iNext - numVerts];
|
||||||
|
|
||||||
newViewerFace2.n1 = this.normals[i];
|
newViewerFace2.n1 = this.normals[i];
|
||||||
newViewerFace2.n2 = this.normals[i - numVerts + 1];
|
newViewerFace2.n2 = this.normals[iNext - numVerts];
|
||||||
newViewerFace2.n3 = this.normals[i + 1];
|
newViewerFace2.n3 = this.normals[iNext];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1413,7 +1409,7 @@ namespace PrimMesher
|
||||||
|
|
||||||
if (this.hasProfileCut)
|
if (this.hasProfileCut)
|
||||||
{ // add the end cut face to the list of viewerFaces here
|
{ // add the end cut face to the list of viewerFaces here
|
||||||
// the first cut face was filled in the above loop
|
// the prior cut face was filled in the above loop
|
||||||
newFace.v1 = coordsLen - 1;
|
newFace.v1 = coordsLen - 1;
|
||||||
newFace.v2 = coordsLen - numVerts;
|
newFace.v2 = coordsLen - numVerts;
|
||||||
newFace.v3 = coordsLen;
|
newFace.v3 = coordsLen;
|
||||||
|
@ -1423,43 +1419,6 @@ namespace PrimMesher
|
||||||
newFace.v2 = coordsLen - 1;
|
newFace.v2 = coordsLen - 1;
|
||||||
newFace.v3 = coordsLen;
|
newFace.v3 = coordsLen;
|
||||||
this.faces.Add(newFace);
|
this.faces.Add(newFace);
|
||||||
|
|
||||||
if (this.viewerMode)
|
|
||||||
{
|
|
||||||
ViewerFace newViewerFace = new ViewerFace();
|
|
||||||
newViewerFace.v1 = this.coords[coordsLen - 1]; // last vert in prior layer
|
|
||||||
newViewerFace.v2 = this.coords[coordsLen - numVerts]; // first vert in prior layer
|
|
||||||
newViewerFace.v3 = this.coords[coordsLen]; // first vert in new layer
|
|
||||||
|
|
||||||
float u1 = newLayer.us[0];
|
|
||||||
float u2 = newLayer.us[newLayer.us.Count - 1];
|
|
||||||
|
|
||||||
newViewerFace.n2 = newViewerFace.n1 = lastCutNormal2;
|
|
||||||
newViewerFace.n3 = newLayer.cutNormal2;
|
|
||||||
|
|
||||||
newViewerFace.uv3.U = newViewerFace.uv1.U = u2;
|
|
||||||
newViewerFace.uv2.U = u1;
|
|
||||||
|
|
||||||
newViewerFace.uv1.V = newViewerFace.uv2.V = lastV;
|
|
||||||
newViewerFace.uv3.V = 1.0f - percentOfPath;
|
|
||||||
|
|
||||||
this.viewerFaces.Add(newViewerFace);
|
|
||||||
|
|
||||||
newViewerFace.v1 = this.coords[coordsLen + numVerts - 1]; // last vert in new layer
|
|
||||||
newViewerFace.v2 = this.coords[coordsLen - 1]; // last vert in prior layer
|
|
||||||
newViewerFace.v3 = this.coords[coordsLen]; // first vert in new layer
|
|
||||||
|
|
||||||
newViewerFace.n3 = newViewerFace.n1 = newLayer.cutNormal2;
|
|
||||||
newViewerFace.n2 = lastCutNormal2;
|
|
||||||
|
|
||||||
newViewerFace.uv2.U = newViewerFace.uv1.U = u1;
|
|
||||||
newViewerFace.uv3.U = u2;
|
|
||||||
|
|
||||||
newViewerFace.uv3.V = newViewerFace.uv1.V = 1.0f - percentOfPath;
|
|
||||||
newViewerFace.uv2.V = lastV;
|
|
||||||
|
|
||||||
this.viewerFaces.Add(newViewerFace);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1729,23 +1688,26 @@ namespace PrimMesher
|
||||||
if (step > firstStep)
|
if (step > firstStep)
|
||||||
{
|
{
|
||||||
int startVert = coordsLen + 1;
|
int startVert = coordsLen + 1;
|
||||||
int endVert = this.coords.Count - 1;
|
int endVert = this.coords.Count;
|
||||||
|
|
||||||
if (sides < 5 || this.hasProfileCut || hollow > 0.0f)
|
if (sides < 5 || this.hasProfileCut || hollow > 0.0f)
|
||||||
startVert--;
|
startVert--;
|
||||||
|
|
||||||
for (int i = startVert; i < endVert; i++)
|
for (int i = startVert; i < endVert; i++)
|
||||||
//for (int i = coordsLen; i < this.coords.Count - 1; i++)
|
|
||||||
{
|
{
|
||||||
|
int iNext = i + 1;
|
||||||
|
if (i == endVert - 1)
|
||||||
|
iNext = startVert;
|
||||||
|
|
||||||
int whichVert = i - startVert;
|
int whichVert = i - startVert;
|
||||||
|
|
||||||
newFace.v1 = i;
|
newFace.v1 = i;
|
||||||
newFace.v2 = i - numVerts;
|
newFace.v2 = i - numVerts;
|
||||||
newFace.v3 = i - numVerts + 1;
|
newFace.v3 = iNext - numVerts;
|
||||||
this.faces.Add(newFace);
|
this.faces.Add(newFace);
|
||||||
|
|
||||||
newFace.v2 = i - numVerts + 1;
|
newFace.v2 = iNext - numVerts;
|
||||||
newFace.v3 = i + 1;
|
newFace.v3 = iNext;
|
||||||
this.faces.Add(newFace);
|
this.faces.Add(newFace);
|
||||||
|
|
||||||
if (this.viewerMode)
|
if (this.viewerMode)
|
||||||
|
@ -1776,11 +1738,11 @@ namespace PrimMesher
|
||||||
|
|
||||||
newViewerFace1.v1 = this.coords[i];
|
newViewerFace1.v1 = this.coords[i];
|
||||||
newViewerFace1.v2 = this.coords[i - numVerts];
|
newViewerFace1.v2 = this.coords[i - numVerts];
|
||||||
newViewerFace1.v3 = this.coords[i - numVerts + 1];
|
newViewerFace1.v3 = this.coords[iNext - numVerts];
|
||||||
|
|
||||||
newViewerFace2.v1 = this.coords[i];
|
newViewerFace2.v1 = this.coords[i];
|
||||||
newViewerFace2.v2 = this.coords[i - numVerts + 1];
|
newViewerFace2.v2 = this.coords[iNext - numVerts];
|
||||||
newViewerFace2.v3 = this.coords[i + 1];
|
newViewerFace2.v3 = this.coords[iNext];
|
||||||
|
|
||||||
if (whichVert == newLayer.numOuterVerts - 1 && hasProfileCut)
|
if (whichVert == newLayer.numOuterVerts - 1 && hasProfileCut)
|
||||||
{ // start profile cut faces
|
{ // start profile cut faces
|
||||||
|
@ -1803,11 +1765,11 @@ namespace PrimMesher
|
||||||
{
|
{
|
||||||
newViewerFace1.n1 = this.normals[i];
|
newViewerFace1.n1 = this.normals[i];
|
||||||
newViewerFace1.n2 = this.normals[i - numVerts];
|
newViewerFace1.n2 = this.normals[i - numVerts];
|
||||||
newViewerFace1.n3 = this.normals[i - numVerts + 1];
|
newViewerFace1.n3 = this.normals[iNext - numVerts];
|
||||||
|
|
||||||
newViewerFace2.n1 = this.normals[i];
|
newViewerFace2.n1 = this.normals[i];
|
||||||
newViewerFace2.n2 = this.normals[i - numVerts + 1];
|
newViewerFace2.n2 = this.normals[iNext - numVerts];
|
||||||
newViewerFace2.n3 = this.normals[i + 1];
|
newViewerFace2.n3 = this.normals[iNext];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1816,57 +1778,6 @@ namespace PrimMesher
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.hasProfileCut)
|
|
||||||
{ // add the end cut face to the list of viewerFaces here
|
|
||||||
// the first cut face was filled in the above loop
|
|
||||||
newFace.v1 = coordsLen - 1;
|
|
||||||
newFace.v2 = coordsLen - numVerts;
|
|
||||||
newFace.v3 = coordsLen;
|
|
||||||
this.faces.Add(newFace);
|
|
||||||
|
|
||||||
newFace.v1 = coordsLen + numVerts - 1;
|
|
||||||
newFace.v2 = coordsLen - 1;
|
|
||||||
newFace.v3 = coordsLen;
|
|
||||||
this.faces.Add(newFace);
|
|
||||||
|
|
||||||
if (this.viewerMode)
|
|
||||||
{
|
|
||||||
ViewerFace newViewerFace = new ViewerFace();
|
|
||||||
newViewerFace.v1 = this.coords[coordsLen - 1]; // last vert in prior layer
|
|
||||||
newViewerFace.v2 = this.coords[coordsLen - numVerts]; // first vert in prior layer
|
|
||||||
newViewerFace.v3 = this.coords[coordsLen]; // first vert in new layer
|
|
||||||
|
|
||||||
float u1 = newLayer.us[0];
|
|
||||||
float u2 = newLayer.us[newLayer.us.Count - 1];
|
|
||||||
|
|
||||||
newViewerFace.n2 = newViewerFace.n1 = lastCutNormal2;
|
|
||||||
newViewerFace.n3 = newLayer.cutNormal2;
|
|
||||||
|
|
||||||
newViewerFace.uv3.U = newViewerFace.uv1.U = u2;
|
|
||||||
newViewerFace.uv2.U = u1;
|
|
||||||
|
|
||||||
newViewerFace.uv1.V = newViewerFace.uv2.V = lastV;
|
|
||||||
newViewerFace.uv3.V = 1.0f - percentOfPath;
|
|
||||||
|
|
||||||
this.viewerFaces.Add(newViewerFace);
|
|
||||||
|
|
||||||
newViewerFace.v1 = this.coords[coordsLen + numVerts - 1]; // last vert in new layer
|
|
||||||
newViewerFace.v2 = this.coords[coordsLen - 1]; // last vert in prior layer
|
|
||||||
newViewerFace.v3 = this.coords[coordsLen]; // first vert in new layer
|
|
||||||
|
|
||||||
newViewerFace.n3 = newViewerFace.n1 = newLayer.cutNormal2;
|
|
||||||
newViewerFace.n2 = lastCutNormal2;
|
|
||||||
|
|
||||||
newViewerFace.uv2.U = newViewerFace.uv1.U = u1;
|
|
||||||
newViewerFace.uv3.U = u2;
|
|
||||||
|
|
||||||
newViewerFace.uv3.V = newViewerFace.uv1.V = 1.0f - percentOfPath;
|
|
||||||
newViewerFace.uv2.V = lastV;
|
|
||||||
|
|
||||||
this.viewerFaces.Add(newViewerFace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lastCutNormal1 = newLayer.cutNormal1;
|
lastCutNormal1 = newLayer.cutNormal1;
|
||||||
|
@ -1930,7 +1841,8 @@ namespace PrimMesher
|
||||||
|
|
||||||
public Coord SurfaceNormal(int faceIndex)
|
public Coord SurfaceNormal(int faceIndex)
|
||||||
{
|
{
|
||||||
if (faceIndex < 0 || faceIndex >= faces.Count)
|
int numFaces = faces.Count;
|
||||||
|
if (faceIndex < 0 || faceIndex >= numFaces)
|
||||||
throw new Exception("faceIndex out of range");
|
throw new Exception("faceIndex out of range");
|
||||||
|
|
||||||
//return new Coord(0.0f, 0.0f, 0.0f);
|
//return new Coord(0.0f, 0.0f, 0.0f);
|
||||||
|
|
Loading…
Reference in New Issue