public void AddLoftedGeometry(
IList<IList<Point3D>> positionsList,
IList<IList<Vector3D>> normalList,
IList<IList<Point>> textureCoordinateList)
{
int index0 = this.positions.Count;
int n = -1;
for (int i = 0; i < positionsList.Count; i++)
{
var pc = positionsList[i];
// check that all curves have same number of points
if (n == -1)
{
n = pc.Count;
}
if (pc.Count != n)
{
throw new InvalidOperationException(AllCurvesShouldHaveTheSameNumberOfPoints);
}
// add the points
foreach (var p in pc)
{
this.positions.Add(p);
}
// add normals
if (this.normals != null && normalList != null)
{
var nc = normalList[i];
foreach (var normal in nc)
{
this.normals.Add(normal);
}
}
// add texcoords
if (this.textureCoordinates != null && textureCoordinateList != null)
{
var tc = textureCoordinateList[i];
foreach (var t in tc)
{
this.textureCoordinates.Add(t);
}
}
}
for (int i = 0; i + 1 < positionsList.Count; i++)
{
for (int j = 0; j + 1 < n; j++)
{
int i0 = index0 + (i * n) + j;
int i1 = i0 + n;
int i2 = i1 + 1;
int i3 = i0 + 1;
this.triangleIndices.Add(i0);
this.triangleIndices.Add(i1);
this.triangleIndices.Add(i2);
this.triangleIndices.Add(i2);
this.triangleIndices.Add(i3);
this.triangleIndices.Add(i0);
}
}
}