Perlin Noise を C++ で実装

プロシージャルテクスチャの作成に便利な、Ken Perlin の ImprovedNoiseC++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 の雲模様フィルタのような画像を作成します。