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; //} }
public void AddLine(Vector3 start, Vector3 end, Color startColor, Color endColor) { var startVert = new VertexPositionColorNormal(start, startColor, Vector3.Zero); var endVert = new VertexPositionColorNormal(end, endColor, Vector3.Zero); int startIndex = Array.IndexOf(Vertices, startVert); int endIndex = Array.IndexOf(Vertices, endVert); //If start vertex can't be recycled from an old one, make a new one. if (startIndex == -1) { AddVertex(startVert); startIndex = Vertices.Length - 1; } //If end vertex can't be recycled from an old one, make a new one. if (endIndex == -1) { AddVertex(endVert); endIndex = Vertices.Length - 1; } for (int i = 0; i < Indices.Length; i += 2) { int lineStart = Indices[i]; if ((i + 1) < Indices.Length) { int lineEnd = Indices[i + 1]; if (lineStart == startIndex && lineEnd == endIndex) { // Line literally already exists lmao return; } } } AddIndex(startIndex); AddIndex(endIndex); }