Perlin Noise を C++ で実装
プロシージャルテクスチャの作成に便利な、Ken Perlin の ImprovedNoise を C++11 で実装しました。https://github.com/Reputeless/PerlinNoise
リファレンス実装には無い、乱数シード設定、1D/2D ノイズ、オクターブノイズといった機能を追加しています。
C++11 は std::iota, std::begin, std::mt19937, std::shuffle を使用。
Visual Studio 2012 で動作を確認しました。
PerlinNoise::PerlinNoise( unsigned seed ) { // Precondition: 0 < seed if(seed==0) { seed = std::mt19937::default_seed; } // p[0]..p[255] contains all numbers in [0..255] in random order std::iota(std::begin(p),std::begin(p)+256,0); std::shuffle(std::begin(p),std::begin(p)+256,std::mt19937(seed)); for(int i=0; i<256; ++i) { p[256+i] = p[i]; } }
Sample.cpp は Photoshop の雲模様フィルタのような画像を作成します。