Exemple #1
0
        private Vector3[] WarpVertices(Vector3[] inputVertices)
        {
            Vector3[]     vertices = inputVertices;
            System.Random random   = new System.Random();
            int           seed     = random.Next(0, int.MaxValue);
            INoise        perlin   = new PerlinNoise(seed, 2.0f);
            FractalNoise  fractal  = new FractalNoise(perlin, 3, 1.0f);

            for (int i = 0; i < vertices.Length; i++)
            {
                Vector3 vec3 = vertices[i];

                float x = vec3.x + (vec3.x * 5 * random.Next(100, 140) / 100);
                float y = vec3.y - (vec3.x * 7 * random.Next(100, 140) / 100);
                float z = vec3.z - (vec3.y * 4.5f * random.Next(100, 140) / 100);

                vec3 = new Vector3(x, y, z).normalized;

                float scale = 50f;
                int   sign  = random.Next(1, 2) == 1 ? 1 : -1;
                x = vec3.x + sign * (fractal.Sample1D(vec3.x) * scale);
                y = vec3.y + sign * (fractal.Sample1D(vec3.y) * scale);
                z = vec3.z + sign * (fractal.Sample1D(vec3.z) * scale);

                vertices[i] = new Vector3(x, y, z).normalized;
            }

            return(vertices);
        }