public void CanConvertTriangleStripToTriangleList() { // Arrange. Int32Collection indices = new Int32Collection(new[] { 0, 3, 1, 4, 2, 5 }); // Act. Int32Collection newIndices = MeshUtility.ConvertTriangleStripToTriangleList(indices); // Assert. CollectionAssert.AreEqual(new[] { 0, 3, 1, 1, 3, 4, 1, 4, 2, 2, 4, 5 }, newIndices); }
public override void Tessellate() { // Create vertices. Vector3D normal = new Vector3D(0, 1, 0); for (int z = 0; z < _length; ++z) { for (int x = 0; x < _width; ++x) { AddVertex(new Point3D(x, 0, (_length - 1) - z), normal); // Invert z so that winding order is correct. } } // Create indices. for (int z = 0; z < _length - 1; ++z) { for (int x = 0; x < _width; ++x) { // Create vertex for degenerate triangle. if (x == 0 && z > 0) { AddIndex(((z + 0) * _width) + x); } AddIndex(((z + 0) * _width) + x); AddIndex(((z + 1) * _width) + x); // Create vertex for degenerate triangle. if (x == _width - 1 && z < _length - 2) { AddIndex(((z + 1) * _width) + x); } } } // It's easiest to define the plane in terms of a triangle strip, // and then convert it. Int32Collection newIndices = MeshUtility.ConvertTriangleStripToTriangleList(Indices); Indices.Clear(); Indices.AddRange(newIndices); }