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

Function inoise16_raw

src/noise.cpp.hpp:303–344  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

301}
302
303fl::i16 inoise16_raw(fl::u32 x, fl::u32 y, fl::u32 z)
304{
305 // Find the unit cube containing the point
306 fl::u8 X = (x>>16)&0xFF;
307 fl::u8 Y = (y>>16)&0xFF;
308 fl::u8 Z = (z>>16)&0xFF;
309
310 // Hash cube corner coordinates
311 fl::u8 A = NOISE_P(X)+Y;
312 fl::u8 AA = NOISE_P(A)+Z;
313 fl::u8 AB = NOISE_P(A+1)+Z;
314 fl::u8 B = NOISE_P(X+1)+Y;
315 fl::u8 BA = NOISE_P(B) + Z;
316 fl::u8 BB = NOISE_P(B+1)+Z;
317
318 // Get the relative position of the point in the cube
319 fl::u16 u = x & 0xFFFF;
320 fl::u16 v = y & 0xFFFF;
321 fl::u16 w = z & 0xFFFF;
322
323 // Get a signed version of the above for the grad function
324 fl::i16 xx = (u >> 1) & 0x7FFF;
325 fl::i16 yy = (v >> 1) & 0x7FFF;
326 fl::i16 zz = (w >> 1) & 0x7FFF;
327 fl::u16 N = 0x8000L;
328
329 u = EASE16(u); v = EASE16(v); w = EASE16(w);
330
331 // skip the log fade adjustment for the moment, otherwise here we would
332 // adjust fade values for u,v,w
333 fl::i16 X1 = LERP(grad16(NOISE_P(AA), xx, yy, zz), grad16(NOISE_P(BA), xx - N, yy, zz), u);
334 fl::i16 X2 = LERP(grad16(NOISE_P(AB), xx, yy-N, zz), grad16(NOISE_P(BB), xx - N, yy - N, zz), u);
335 fl::i16 X3 = LERP(grad16(NOISE_P(AA+1), xx, yy, zz-N), grad16(NOISE_P(BA+1), xx - N, yy, zz-N), u);
336 fl::i16 X4 = LERP(grad16(NOISE_P(AB+1), xx, yy-N, zz-N), grad16(NOISE_P(BB+1), xx - N, yy - N, zz - N), u);
337
338 fl::i16 Y1 = LERP(X1,X2,v);
339 fl::i16 Y2 = LERP(X3,X4,v);
340
341 fl::i16 ans = LERP(Y1,Y2,w);
342
343 return ans;
344}
345
346fl::i16 inoise16_raw(fl::u32 x, fl::u32 y, fl::u32 z, fl::u32 t) {
347 // 1. Extract the integer (grid) parts.

Callers 1

inoise16Function · 0.85

Calls 1

grad16Function · 0.85

Tested by

no test coverage detected