private void AddVertex(VertexPositionColorNormal vert) { Array.Resize(ref Vertices, Vertices.Length + 1); Vertices[Vertices.Length - 1] = vert; NeedToRecreateVertBuffer = true; }
public void AddTri(Vector3 a, Vector3 b, Vector3 c, Color colorA, Color colorB, Color colorC) { var dir = Vector3.Cross(b - a, c - a); var norm = Vector3.Normalize(dir); var vertA = new VertexPositionColorNormal(a, colorA, norm); var vertB = new VertexPositionColorNormal(b, colorB, norm); var vertC = new VertexPositionColorNormal(c, colorC, norm); int vertIndexA = Array.IndexOf(Vertices, vertA); int vertIndexB = Array.IndexOf(Vertices, vertB); int vertIndexC = Array.IndexOf(Vertices, vertC); //If vertex A can't be recycled from an old one, make a new one. if (vertIndexA == -1) { AddVertex(vertA); vertIndexA = Vertices.Length - 1; } //If vertex B can't be recycled from an old one, make a new one. if (vertIndexB == -1) { AddVertex(vertB); vertIndexB = Vertices.Length - 1; } //If vertex C can't be recycled from an old one, make a new one. if (vertIndexC == -1) { AddVertex(vertC); vertIndexC = Vertices.Length - 1; } AddIndex(vertIndexA); AddIndex(vertIndexB); AddIndex(vertIndexC); //if (NeedToRecreateVertBuffer) //{ // VertBuffer = new VertexBuffer(GFX.Device, // typeof(VertexPositionColor), Vertices.Length, BufferUsage.WriteOnly); // VertBuffer.SetData(Vertices); // NeedToRecreateVertBuffer = false; //} //if (NeedToRecreateIndexBuffer) //{ // IndexBuffer = new IndexBuffer(GFX.Device, IndexElementSize.ThirtyTwoBits, Indices.Length, BufferUsage.WriteOnly); // IndexBuffer.SetData(Indices); // NeedToRecreateIndexBuffer = false; //} }