MCPcopy Create free account
hub / github.com/FastLED/FastLED / pnoise3d_raw

Method pnoise3d_raw

src/fl/math/noise/perlin_s16x16.cpp.hpp:102–138  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100}
101
102fl::i32 perlin_s16x16::pnoise3d_raw(fl::i32 fx_raw, fl::i32 fy_raw, fl::i32 fz_raw,
103 const fl::i32 *fade_lut,
104 const fl::u8 *perm) {
105 int X, Y, Z;
106 fl::i32 x, y, z;
107 floor_frac(fx_raw, X, x);
108 floor_frac(fy_raw, Y, y);
109 floor_frac(fz_raw, Z, z);
110 X &= 255;
111 Y &= 255;
112 Z &= 255;
113
114 fl::i32 u = fade(x, fade_lut);
115 fl::i32 v = fade(y, fade_lut);
116 fl::i32 w = fade(z, fade_lut);
117
118 int A = perm[X & 255] + Y;
119 int AA = perm[A & 255] + Z;
120 int AB = perm[(A + 1) & 255] + Z;
121 int B = perm[(X + 1) & 255] + Y;
122 int BA = perm[B & 255] + Z;
123 int BB = perm[(B + 1) & 255] + Z;
124
125 fl::i32 result = lerp(w,
126 lerp(v,
127 lerp(u, grad3d(perm[AA & 255], x, y, z),
128 grad3d(perm[BA & 255], x - HP_ONE, y, z)),
129 lerp(u, grad3d(perm[AB & 255], x, y - HP_ONE, z),
130 grad3d(perm[BB & 255], x - HP_ONE, y - HP_ONE, z))),
131 lerp(v,
132 lerp(u, grad3d(perm[(AA + 1) & 255], x, y, z - HP_ONE),
133 grad3d(perm[(BA + 1) & 255], x - HP_ONE, y, z - HP_ONE)),
134 lerp(u, grad3d(perm[(AB + 1) & 255], x, y - HP_ONE, z - HP_ONE),
135 grad3d(perm[(BB + 1) & 255], x - HP_ONE, y - HP_ONE, z - HP_ONE))));
136
137 return result >> (HP_BITS - fl::s16x16::FRAC_BITS);
138}
139
140fl::i32 perlin_s16x16::grad3d(int hash, fl::i32 x, fl::i32 y, fl::i32 z) {
141 // Matches float grad(hash, x, y, z) from perlin_float.h:

Callers

nothing calls this directly

Calls 2

fadeFunction · 0.85
lerpFunction · 0.50

Tested by

no test coverage detected