Ejemplo n.º 1
0
        public float Noise(Vec3 vec)
        {
            var cube  = vec.Floor();
            var pt    = vec - cube;
            var faded = Fade(pt);
            var X     = (int)cube.X;
            var Y     = (int)cube.Y;
            var Z     = (int)cube.Z;

            int A  = Permutation(X) + Y,
                AA = Permutation(A) + Z,
                AB = Permutation(A + 1) + Z,
                B  = Permutation(X + 1) + Y,
                BA = Permutation(B) + Z,
                BB = Permutation(B + 1) + Z;

            return(FMath.Mix(
                       FMath.Mix(
                           FMath.Mix(
                               Gradient(Permutation(AA), pt.X, pt.Y, pt.Z),
                               Gradient(Permutation(BA), pt.X - 1f, pt.Y, pt.Z),
                               faded.X),
                           FMath.Mix(
                               Gradient(Permutation(AB), pt.X, pt.Y - 1f, pt.Z),
                               Gradient(Permutation(BB), pt.X - 1f, pt.Y - 1f, pt.Z),
                               faded.X),
                           faded.Y),
                       FMath.Mix(
                           FMath.Mix(
                               Gradient(Permutation(AA + 1), pt.X, pt.Y, pt.Z - 1f),
                               Gradient(Permutation(BA + 1), pt.X - 1f, pt.Y, pt.Z - 1f),
                               faded.X),
                           FMath.Mix(
                               Gradient(Permutation(AB + 1), pt.X, pt.Y - 1f, pt.Z - 1f),
                               Gradient(Permutation(BB + 1), pt.X - 1f, pt.Y - 1f, pt.Z - 1f),
                               faded.X),
                           faded.Y),
                       faded.Z));
        }
Ejemplo n.º 2
0
        public float PeriodicNoise(Vec3 vec, Vec3 period)
        {
            var cube  = vec.Floor();
            var pt    = vec - cube;
            var faded = Fade(pt);
            var iv    = cube.Mod(period).Floor().ToVeci();
            var jv    = (cube + new Vec3(1f)).Mod(period).Floor().ToVeci();
            int A     = Permutation(iv.X),
                AA    = Permutation(A + iv.Y),
                AB    = Permutation(A + jv.Y),
                B     = Permutation(jv.X),
                BA    = Permutation(B + iv.Y),
                BB    = Permutation(B + jv.Y);

            return(FMath.Mix(
                       FMath.Mix(
                           FMath.Mix(
                               Gradient(Permutation(AA + iv.Z), pt.X, pt.Y, pt.Z),
                               Gradient(Permutation(BA + iv.Z), pt.X - 1f, pt.Y, pt.Z),
                               faded.X),
                           FMath.Mix(
                               Gradient(Permutation(AB + iv.Z), pt.X, pt.Y - 1f, pt.Z),
                               Gradient(Permutation(BB + iv.Z), pt.X - 1f, pt.Y - 1f, pt.Z),
                               faded.X),
                           faded.Y),
                       FMath.Mix(
                           FMath.Mix(
                               Gradient(Permutation(AA + jv.Z), pt.X, pt.Y, pt.Z - 1f),
                               Gradient(Permutation(BA + jv.Z), pt.X - 1f, pt.Y, pt.Z - 1f),
                               faded.X),
                           FMath.Mix(
                               Gradient(Permutation(AB + jv.Z), pt.X, pt.Y - 1f, pt.Z - 1f),
                               Gradient(Permutation(BB + jv.Z), pt.X - 1f, pt.Y - 1f, pt.Z - 1f),
                               faded.X),
                           faded.Y),
                       faded.Z));
        }
Ejemplo n.º 3
0
 public static V Mix <V> (this V vec, V other, float interPos)
     where V : struct, IVec <V, float>
 {
     return(vec.Map2 <V, float> (other, (x, y) => FMath.Mix(x, y, interPos)));
 }