| 532 | } |
| 533 | |
| 534 | fl::i8 inoise8_raw(fl::u16 x, fl::u16 y, fl::u16 z) |
| 535 | { |
| 536 | // Find the unit cube containing the point |
| 537 | fl::u8 X = x>>8; |
| 538 | fl::u8 Y = y>>8; |
| 539 | fl::u8 Z = z>>8; |
| 540 | |
| 541 | // Hash cube corner coordinates |
| 542 | fl::u8 A = NOISE_P(X)+Y; |
| 543 | fl::u8 AA = NOISE_P(A)+Z; |
| 544 | fl::u8 AB = NOISE_P(A+1)+Z; |
| 545 | fl::u8 B = NOISE_P(X+1)+Y; |
| 546 | fl::u8 BA = NOISE_P(B) + Z; |
| 547 | fl::u8 BB = NOISE_P(B+1)+Z; |
| 548 | |
| 549 | // Get the relative position of the point in the cube |
| 550 | fl::u8 u = x; |
| 551 | fl::u8 v = y; |
| 552 | fl::u8 w = z; |
| 553 | |
| 554 | // Get a signed version of the above for the grad function |
| 555 | fl::i8 xx = ((fl::u8)(x)>>1) & 0x7F; |
| 556 | fl::i8 yy = ((fl::u8)(y)>>1) & 0x7F; |
| 557 | fl::i8 zz = ((fl::u8)(z)>>1) & 0x7F; |
| 558 | fl::u8 N = 0x80; |
| 559 | |
| 560 | u = EASE8(u); v = EASE8(v); w = EASE8(w); |
| 561 | |
| 562 | fl::i8 X1 = lerp7by8(grad8(NOISE_P(AA), xx, yy, zz), grad8(NOISE_P(BA), xx - N, yy, zz), u); |
| 563 | fl::i8 X2 = lerp7by8(grad8(NOISE_P(AB), xx, yy-N, zz), grad8(NOISE_P(BB), xx - N, yy - N, zz), u); |
| 564 | fl::i8 X3 = lerp7by8(grad8(NOISE_P(AA+1), xx, yy, zz-N), grad8(NOISE_P(BA+1), xx - N, yy, zz-N), u); |
| 565 | fl::i8 X4 = lerp7by8(grad8(NOISE_P(AB+1), xx, yy-N, zz-N), grad8(NOISE_P(BB+1), xx - N, yy - N, zz - N), u); |
| 566 | |
| 567 | fl::i8 Y1 = lerp7by8(X1,X2,v); |
| 568 | fl::i8 Y2 = lerp7by8(X3,X4,v); |
| 569 | |
| 570 | fl::i8 ans = lerp7by8(Y1,Y2,w); |
| 571 | |
| 572 | return ans; |
| 573 | } |
| 574 | |
| 575 | fl::u8 inoise8(fl::u16 x, fl::u16 y, fl::u16 z) { |
| 576 | //return scale8(76+(inoise8_raw(x,y,z)),215)<<1; |
no test coverage detected