Exemplo n.º 1
0
        /// <summary>
        /// Generates a list of triangles for use with the water effect
        /// </summary>
        /// <param name="Colors">A list of colors to use that will be randomly selected from the array.</param>
        /// <param name="Depth">Depth of the terrain</param>
        /// <param name="Width">Width of the terrain</param>
        /// <returns></returns>
        public static IEnumerable <VertexPositionColor_Vector4> getTrisAlternatingForEff(Color[] Colors, int Depth, int Width, float PointSpacing)
        {
            Vector4[,] colours = new Vector4[Depth + 1, Width + 1];
            for (int i = 0; i != Depth + 1; i++)
            {
                for (int j = 0; j != Width + 1; j++)
                {
                    colours[i, j] = Colors[RNG.Next(Colors.Length)].ToVector4();
                }
            }
            for (int i = 0; i < Depth; i++)     //I is Y axis
            {
                for (int j = 0; j < Width; j++) //J is X axis
                {
                    if ((i + j) % 2 == 0)
                    {
                        var a = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, j * PointSpacing), colours[i, j]);
                        var b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                        var c = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);

                        yield return(a);

                        yield return(b);

                        yield return(c);

                        b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);
                        c = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, (j + 1) * PointSpacing), colours[i, j + 1]);

                        yield return(a);

                        yield return(b);

                        yield return(c);
                    }
                    else
                    {
                        var a = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, j * PointSpacing), colours[i, j]);
                        var b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                        var c = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, (j + 1) * PointSpacing), colours[i, j + 1]);

                        yield return(a);

                        yield return(b);

                        yield return(c);

                        a = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                        b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);

                        yield return(a);

                        yield return(b);

                        yield return(c);
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Generates a list of triangles for use with the water effect
        /// </summary>
        /// <param name="Colors">A list of colors to use that will be randomly selected from the array.</param>
        /// <param name="Depth">Depth of the terrain</param>
        /// <param name="Width">Width of the terrain</param>
        /// <returns></returns>
        public static IEnumerable <VertexPositionColor_Vector4> getTrisAlternatingForEffInCircle(Color[] Colors, int Depth, int Width, float PointSpacing, float Radius, Color ClearColor)
        {
            Vector4[,] colours = new Vector4[Depth + 1, Width + 1];
            for (int i = 0; i != Depth + 1; i++)
            {
                for (int j = 0; j != Width + 1; j++)
                {
                    if (Vector2.Distance(new Vector2(Depth / 2 * PointSpacing, Width / 2 * PointSpacing), new Vector2(i * PointSpacing, j * PointSpacing)) <= Radius - 100)
                    {
                        colours[i, j] = Colors[RNG.Next(Colors.Length)].ToVector4();
                    }
                    else
                    {
                        colours[i, j]   = ClearColor.ToVector4();
                        colours[i, j].W = 0 / 255f;
                    }
                }
            }
            for (int i = 0; i < Depth; i++)     //I is Y axis
            {
                for (int j = 0; j < Width; j++) //J is X axis
                {
                    if (Vector2.Distance(new Vector2(Depth / 2 * PointSpacing, Width / 2 * PointSpacing), new Vector2(i * PointSpacing, j * PointSpacing)) <= Radius)
                    {
                        if ((i + j) % 2 == 0)
                        {
                            var a = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, j * PointSpacing), colours[i, j]);
                            var b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                            var c = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);

                            yield return(a);

                            yield return(b);

                            yield return(c);

                            b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);
                            c = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, (j + 1) * PointSpacing), colours[i, j + 1]);

                            yield return(a);

                            yield return(b);

                            yield return(c);
                        }
                        else
                        {
                            var a = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, j * PointSpacing), colours[i, j]);
                            var b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                            var c = new VertexPositionColor_Vector4(new Vector3(i * PointSpacing, 0, (j + 1) * PointSpacing), colours[i, j + 1]);

                            yield return(a);

                            yield return(b);

                            yield return(c);

                            a = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, j * PointSpacing), colours[i + 1, j]);
                            b = new VertexPositionColor_Vector4(new Vector3((i + 1) * PointSpacing, 0, (j + 1) * PointSpacing), colours[i + 1, j + 1]);

                            yield return(a);

                            yield return(b);

                            yield return(c);
                        }
                    }
                }
            }
        }