/// <summary> /// Builds a rectangular mesh, centered around the origin. /// </summary> public static Mesh Rectangle(Renderer renderer, Color color, float width, float height, float textureMapTiling) { Mesh rectMesh = new Mesh(renderer, 4, 2); rectMesh.AddVertex(0, new Vector3(-width / 2, height / 2, 1.0f), color, new Vector2(0.0f, 0.0f)); rectMesh.AddVertex(1, new Vector3(width / 2, height / 2, 1.0f), color, new Vector2(textureMapTiling, 0.0f)); rectMesh.AddVertex(2, new Vector3(width / 2, -height / 2, 1.0f), color, new Vector2(textureMapTiling, textureMapTiling)); rectMesh.AddVertex(3, new Vector3(-width / 2, -height / 2, 1.0f), color, new Vector2(0.0f, textureMapTiling)); rectMesh.AddTriangle(0, 0, 1, 2); rectMesh.AddTriangle(1, 0, 2, 3); return rectMesh; }
/// <summary> /// Builds a circular mesh centered around the origin. /// </summary> public static Mesh Circle(Renderer renderer, Color centerColor, Color rimColor, float radius, int numSubdivisions) { Mesh circleMesh = new Mesh(renderer, numSubdivisions, numSubdivisions - 2); float angleStep = (2 * (float)Math.PI) / numSubdivisions; for (int i = 0; i < numSubdivisions; ++i) { circleMesh.AddVertex(i, new Vector3(radius * (float)Math.Cos(angleStep * i), radius * (float)Math.Sin(angleStep * i), 1.0f), rimColor, new Vector2()); } for (int i = 2, count = 0; i < numSubdivisions - 1; ++i, ++count) { circleMesh.AddTriangle(count, 0, i, i - 1); } circleMesh.AddTriangle(numSubdivisions - 3, 0, numSubdivisions - 2, numSubdivisions - 1); return circleMesh; }