public Cube(Device device, Vector4 color) : base(device) { CreateVertexStream(StreamUsage.Position, CreatePositions()); CreateVertexStream(StreamUsage.Color, ArrayHelper.Create(8, color)); CreateIndexStream(CreateIndices()); }
private static Vector4[] CreateColors() { var topLeft = new Vector4(1f, 0f, 0f, 0f); var topRight = new Vector4(0f, 1f, 0f, 0f); var bottomLeft = new Vector4(0f, 0f, 1f, 0f); return new[] { topLeft, topRight, bottomLeft }; }
public Quad(Device device, Vector4 color) : base(device) { CreateVertexStream(StreamUsage.Position, CreatePositions()); CreateVertexStream(StreamUsage.Color, ArrayHelper.Create(4, color)); CreateVertexStream(StreamUsage.Normal, CreateNormals()); CreateVertexStream(StreamUsage.TextureCoordinates0, CreateTextureCoordinates()); CreateIndexStream(CreateIndices()); }
private static Vector4[] CreateColors() { var frontbottomLeft = new Vector4(1f, 0f, 0f, 0f); var fronttopLeft = new Vector4(0f, 1f, 0f, 0f); var frontbottomRight = new Vector4(0f, 0f, 1f, 0f); var fronttopRight = new Vector4(0.5f, 0.5f, 0.5f, 0f); var backbottomLeft = new Vector4(1f, 0f, 0f, 0f); var backtopLeft = new Vector4(0f, 1f, 0f, 0f); var backbottomRight = new Vector4(0f, 0f, 1f, 0f); var backtopRight = new Vector4(0.5f, 0.5f, 0.5f, 0f); return new[] { frontbottomLeft, fronttopLeft, frontbottomRight, fronttopRight, backbottomRight, backtopRight, backbottomLeft, backtopLeft }; }
public Sphere(Device device, float radius = 1, int rings = 50, int columns = 50) : base(device) { var positionCount = (rings + 1) * (columns + 1); var positions = new Vector3[positionCount]; var normals = new Vector3[positionCount]; var colors = new Vector4[positionCount]; var indices = new uint[2 * rings * (columns + 1)]; var deltaRingAngle = Constants.PI / rings; var deltaColumnAngle = 2 * Constants.PI / columns; uint vertexIndex = 0; for (uint ring = 0; ring < rings + 1; ring++) { var r0 = Functions.Sin(ring * deltaRingAngle); var y0 = Functions.Cos(ring * deltaRingAngle); for (uint column = 0; column < columns + 1; column++) { var normal = new Vector3(r0 * Functions.Sin(column * deltaColumnAngle), y0, r0 * Functions.Cos(column * deltaColumnAngle)); //var uv = new Vector2(column / (float) columns, 1 - ring / (float) rings); var index = ring * (columns + 1) + column; positions[index] = normal * radius; normals[index] = normal; colors[index] = new Vector4(System.Math.Abs(normal.X), System.Math.Abs(normal.Y), System.Math.Abs(normal.Z), 1); if (ring < rings) { indices[vertexIndex * 2] = vertexIndex + (uint) columns + 1; indices[vertexIndex * 2 + 1] = vertexIndex; ++vertexIndex; } } } CreateVertexStream(StreamUsage.Position, positions); CreateIndexStream(indices, PrimitiveTopology.TriangleStrip); CreateVertexStream(StreamUsage.Normal, normals); CreateVertexStream(StreamUsage.Color, colors); //CreateVertexStream(StreamUsage.Color, ArrayHelper.Create(positions.Count, new Vector4(0.5f, 0.5f, 1, 1))); }