384 {
385
390
391
392 fl::u16 u =
x & 0xFFFF;
393 fl::u16 v =
y & 0xFFFF;
394 fl::u16 w =
z & 0xFFFF;
395 fl::u16 s =
t & 0xFFFF;
396
397
398 u = EASE16(u);
399 v = EASE16(v);
400 w = EASE16(w);
401 s = EASE16(s);
402
403 fl::u16 N = 0x8000L;
404
405
406 fl::i16 xx = (u >> 1) & 0x7FFF;
407 fl::i16 yy = (v >> 1) & 0x7FFF;
408 fl::i16 zz = (w >> 1) & 0x7FFF;
409
410
417
418
427
428 fl::i16 L1 = LERP(
grad16(AAA, xx, yy, zz),
grad16(BAA, xx - N, yy, zz), u);
429 fl::i16 L2 = LERP(
grad16(ABA, xx, yy - N, zz),
grad16(BBA, xx - N, yy - N, zz), u);
430 fl::i16 L3 = LERP(
grad16(AAB, xx, yy, zz - N),
grad16(BAB, xx - N, yy, zz - N), u);
431 fl::i16 L4 = LERP(
grad16(ABB, xx, yy - N, zz - N),
grad16(BBB, xx - N, yy - N, zz - N), u);
432
433 fl::i16 Y1 = LERP(L1, L2, v);
434 fl::i16 Y2 = LERP(L3, L4, v);
435 fl::i16 noise_lower = LERP(Y1, Y2, w);
436
437
447
448 fl::i16 U1 = LERP(
grad16(AAA_u, xx, yy, zz),
grad16(BAA_u, xx - N, yy, zz), u);
449 fl::i16 U2 = LERP(
grad16(ABA_u, xx, yy - N, zz),
grad16(BBA_u, xx - N, yy - N, zz), u);
450 fl::i16 U3 = LERP(
grad16(AAB_u, xx, yy, zz - N),
grad16(BAB_u, xx - N, yy, zz - N), u);
451 fl::i16 U4 = LERP(
grad16(ABB_u, xx, yy - N, zz - N),
grad16(BBB_u, xx - N, yy - N, zz - N), u);
452
453 fl::i16 V1 = LERP(U1, U2, v);
454 fl::i16 V2 = LERP(U3, U4, v);
455 fl::i16 noise_upper = LERP(V1, V2, w);
456
457
458 fl::i16 noise4d = LERP(noise_lower, noise_upper, s);
459
460 return noise4d;
461}
static fl::i16 grad16(fl::u8 hash, fl::i16 x, fl::i16 y, fl::i16 z) FL_NO_EXCEPT
#define NOISE_P(x)
Reads a single byte from the p array.