Esempio n. 1
0
 public Cube(Device device, Vector4 color)
     : base(device)
 {
     CreateVertexStream(StreamUsage.Position, CreatePositions());
     CreateVertexStream(StreamUsage.Color, ArrayHelper.Create(8, color));
     CreateIndexStream(CreateIndices());
 }
Esempio n. 2
0
        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 };
        }
Esempio n. 3
0
 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());
 }
Esempio n. 4
0
        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 };
        }
Esempio n. 5
0
        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)));
        }