public void DrawTexturedSolidPolygon(SolidVertex[] vertices, Vector3 normal, Color color, Texture2D texture) { if (vertices.Length < 3) { return; } if (!texturedPolygonBuffer.ContainsKey(texture)) { texturedPolygonBuffer[texture] = new List <PrimitiveVertex>(); } List <PrimitiveVertex> vertexBuffer = texturedPolygonBuffer[texture]; PrimitiveVertex vertex = new PrimitiveVertex { color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f), normal = normal }; // trianglelize polygon and add to texture vertex polygon buffer for (int i = 3; i < vertices.Length + 1; i++) { vertex.position = vertices[0].Position; vertex.uv = vertices[0].DiffuseUv; vertexBuffer.Add(vertex); vertex.position = vertices[i - 2].Position; vertex.uv = vertices[i - 2].DiffuseUv; vertexBuffer.Add(vertex); vertex.position = vertices[i - 1].Position; vertex.uv = vertices[i - 1].DiffuseUv; vertexBuffer.Add(vertex); } }
public void DrawSolidPolygon(SolidVertex[] vertices, Vector3 normal, Color color) { if (vertices.Length < 3) { return; } PrimitiveVertex vertex = new PrimitiveVertex { color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f), normal = normal }; // trianglelize polygon and add to lit polygon buffer for (int i = 3; i < vertices.Length + 1; i++) { vertex.position = vertices[0].Position; litPolygonBuffer.Add(vertex); vertex.position = vertices[i - 2].Position; litPolygonBuffer.Add(vertex); vertex.position = vertices[i - 1].Position; litPolygonBuffer.Add(vertex); } }
private void DrawDashedLine(Vector3 start, Vector3 end, Color color, float zoomFactor = 1.0f) { PrimitiveVertex vStart = new PrimitiveVertex(); PrimitiveVertex vEnd = new PrimitiveVertex(); float lineSize = 4 * zoomFactor; float lineLength = (end - start).Length; int linesToDraw = (int)(lineLength / lineSize) / 2; float emptySpace = (lineLength - linesToDraw * lineSize) / (linesToDraw + 1); Vector3 lineDir = (end - start); lineDir.Normalize(); // set colors vStart.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); vEnd.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); start = start + lineDir * emptySpace; for (int i = 0; i < linesToDraw; i++) { vStart.position = start; vEnd.position = start + lineDir * lineSize; start = vEnd.position + lineDir * emptySpace; lineBuffer.Add(vStart); lineBuffer.Add(vEnd); } }
private void DrawNormalLine(Vector3 start, Vector3 end, Color color) { PrimitiveVertex vStart = new PrimitiveVertex(); PrimitiveVertex vEnd = new PrimitiveVertex(); // set positions vStart.position = start; vEnd.position = end; // set colors vStart.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); vEnd.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); lineBuffer.Add(vStart); lineBuffer.Add(vEnd); }
public void DrawSolidCircle(Vector3 bottomLeft, Vector3 bottomRight, Vector3 topRight, Vector3 topLeft, Color color) { if (!beginEndPair) { // Begin must be called before end return; } Vector3 position = (topLeft + bottomRight) * 0.5f; float radius = (topLeft - topRight).Length / 2.0f; Vector2 dimensions = new Vector2 { X = radius, Y = radius }; Vector3 hBase = (topRight - topLeft).Normalized(); Vector3 vBase = (topLeft - bottomLeft).Normalized(); int piePieces = 12; float degToRad = (float)(Math.PI / 180.0); float radPiece = (360.0f / piePieces * degToRad); Vector3 lastVec = position + hBase * dimensions.X; PrimitiveVertex vert = new PrimitiveVertex { color = new Vector3(color.R, color.G, color.B) }; for (int i = 1; i <= piePieces; i++) { vert.position = position; polygonBuffer.Add(vert); vert.position = lastVec; polygonBuffer.Add(vert); float cos = (float)Math.Cos(i * radPiece) * dimensions.X; float sin = (float)Math.Sin(i * radPiece) * dimensions.Y; vert.position = position + hBase * cos + vBase * sin; polygonBuffer.Add(vert); lastVec = vert.position; } }
public void DrawSolidRectangle(Vector3 bottomLeft, Vector3 bottomRight, Vector3 topRight, Vector3 topLeft, Color color) { if (!beginEndPair) { // Begin must be called before end return; } PrimitiveVertex a = new PrimitiveVertex(); PrimitiveVertex b = new PrimitiveVertex(); PrimitiveVertex c = new PrimitiveVertex(); PrimitiveVertex d = new PrimitiveVertex(); Vector3 rectangleColor = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); a.color = rectangleColor; b.color = rectangleColor; c.color = rectangleColor; d.color = rectangleColor; // counter clockwise a.position = bottomLeft; b.position = bottomRight; c.position = topRight; d.position = topLeft; // create first polygon polygonBuffer.Add(a); polygonBuffer.Add(c); polygonBuffer.Add(d); // create second polygon polygonBuffer.Add(a); polygonBuffer.Add(b); polygonBuffer.Add(c); }