/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . core . math Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġhttps :// github . com / CR Y TE K / CR Y ENGINE / blob / release / Code / C ry Engine / C ry Common / C ry Math / P Noise 3 . h Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ class ĠPer lin Noise Generator ( seed : ĠLong ) Ġ{ ĊĊĠĠĠ Ġ// Ġfrom ĠCR Y tek ĊĠĠĠ Ġprivate Ġval ĠNOI SE _ TABLE _ SIZE Ġ= Ġ 2 5 6 ĊĠĠĠ Ġprivate Ġval ĠNOI SE _ MASK Ġ= Ġ 2 5 5 ĊĊĠĠĠ Ġ// Ġpermutation Ġtable ĊĠĠĠ Ġprivate Ġval Ġp Ġ= ĠInt Array ( NO ISE _ TABLE _ SIZE ) ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġgx Ġ= ĠFloat Array ( NO ISE _ TABLE _ SIZE ) ĊĠĠĠ Ġprivate Ġval Ġgy Ġ= ĠFloat Array ( NO ISE _ TABLE _ SIZE ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Seed And Re initialize ( seed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Seed And Re initialize ( seed : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġj : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġn Swap : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠFX GL Math . getRandom ( seed ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġpermutation Ġtable ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠNOI SE _ TABLE _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp [ i ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠNOI SE _ TABLE _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= ĠFX GL Math . random ( 1 , ĠInt . MAX _ VALUE ) Ġand ĠNOI SE _ MASK ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Swap Ġ= Ġp [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp [ i ] Ġ= Ġp [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp [ j ] Ġ= Ġn Swap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġthe Ġgradient Ġlookup Ġtables ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. NO ISE _ TABLE _ SIZE Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKen ĠPer lin Ġpro poses Ġthat Ġthe Ġgradients Ġare Ġtaken Ġfrom Ġthe Ġunit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcircle / sphere Ġfor Ġ 2 D / 3 D . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSo Ġlets Ġgenerate Ġa Ġgood Ġpseudo - random Ġvector Ġand Ġnormalize Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠVec 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrandom Ġis Ġin Ġthe Ġ 0 .. 1 Ġrange , Ġso Ġwe Ġbring Ġto Ġ- 0 . 5 .. 0 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . x Ġ= Ġrandom . next Float () Ġ- Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . y Ġ= Ġrandom . next Float () Ġ- Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . normalize Local () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgx [ i ] Ġ= Ġv . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgy [ i ] Ġ= Ġv . y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ//! Ġ 1 D Ġquality Ġnoise Ġgenerator , Ġgood Ġfor Ġmany Ġsituations Ġlike Ġup / down Ġmov ements , Ġf lick ering / ambient Ġlights Ġetc . ĊĠĠĠ Ġ//! ĠA Ġtypical Ġusage Ġwould Ġbe Ġto Ġpass Ġsystem Ġtime Ġmultip lied Ġby Ġa Ġfrequency Ġvalue , Ġlike : ĊĠĠĠ Ġ//! Ġfloat Ġf Res = p Noise -> Noise 1 D ( f Current Time * f Freq ); ĊĠĠĠ Ġ//! Ġthe Ġlower Ġthe Ġfrequency , Ġthe Ġsm oo ther Ġthe Ġoutput ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa Ġvalue Ġin Ġ[ 0 .. 1 ], Ġt Ġ> Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnoise 1 D ( t : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġwhat Ġgradients Ġto Ġuse ĊĠĠĠĠĠĠĠ Ġvar Ġq x 0 Ġ= ĠMath . floor ( t ). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġq x 1 Ġ= Ġq x 0 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġtx 0 Ġ= Ġt Ġ- Ġq x 0 ĊĠĠĠĠĠĠĠ Ġval Ġtx 1 Ġ= Ġtx 0 Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġdon 't Ġcome Ġoutside Ġthe Ġlookup Ġtable ĊĠĠĠĠĠĠĠ Ġq x 0 Ġ= Ġq x 0 Ġand ĠNOI SE _ MASK ĊĠĠĠĠĠĠĠ Ġq x 1 Ġ= Ġq x 1 Ġand ĠNOI SE _ MASK ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe Ġdot product Ġbetween Ġthe Ġvectors Ġand Ġthe Ġgradients ĊĠĠĠĠĠĠĠ Ġval Ġv 0 Ġ= Ġgx [ qx 0 ] Ġ* Ġtx 0 ĊĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġgx [ qx 1 ] Ġ* Ġtx 1 ĊĊĠĠĠĠĠĠĠ Ġ// ĠMod ulate Ġwith Ġthe Ġweight Ġfunction ĊĠĠĠĠĠĠĠ Ġval Ġwx Ġ= Ġ( 3 Ġ- Ġ 2 Ġ* Ġtx 0 ) Ġ* Ġtx 0 Ġ* Ġtx 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġv 0 Ġ- Ġwx Ġ* Ġ( v 0 Ġ- Ġv 1 ) Ġ+ Ġ 0 . 5 ĊĠĠĠ Ġ} Ċ }