Skip to content

dtl::utility::PerlinNoise (実用クラス)

Kasugaccho edited this page May 18, 2019 · 12 revisions

バージョン:0.4.8.0以降

<DTL/Utility/PerlinNoise.hpp>

namespace dtl::utility {
  class PerlinNoise;
}

概要

PerlinNoiseとは "パーリンノイズを生成・ノイズ値を取得する" 機能を持つクラスである。

メンバ関数

SEED

名前 説明 対応バージョン
setSeed SEED値を設定する v0.4.8

ノイズ取得

名前 説明 対応バージョン
octaveNoise オクターブ有りノイズを取得する v0.4.8
noise オクターブ無しノイズを取得する v0.4.8

例 (C++11)

#include <DTL.hpp>
#include <DTL/ImageWrite.hpp>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <new>

int main() {

	constexpr std::size_t size_x{ 256 };
	constexpr std::size_t size_y{ 256 };
	using shape_t = double;

	std::unique_ptr<shape_t[][size_x]> matrix(new(std::nothrow) shape_t[size_y][size_x]);

	constexpr double frequency{ 6.0 };
	constexpr std::size_t octaves{ 16 };
	constexpr std::uint_fast32_t seed{ 1 };

	const dtl::utility::PerlinNoise perlin(seed);
	constexpr double frequency_x{ size_x / frequency };
	constexpr double frequency_y{ size_y / frequency };

	for (std::size_t row{}; row < size_y; ++row)
		for (std::size_t col{}; col < size_x; ++col)
			matrix[row][col] = static_cast<shape_t>(50.0 * perlin.octaveNoise(octaves, col / frequency_x, row / frequency_y));

	dtl::storage::FileTerrainOBJ<shape_t>("sample_perlin.obj").write(matrix, size_x, size_y);

	dtl::storage::FilePNG<shape_t>("sample_perlin.png", 3).write(matrix, size_x, size_y, [](const shape_t value, unsigned char* const color) {
		if (value > 25.0) {
			color[0] = 41;
			color[1] = 40;
			color[2] = 159;
		}
		else {
			color[0] = 101;
			color[1] = 163;
			color[2] = 56;
		}
		});

}

出力

pn

pn_3D

画像 (aiさんより提供)

spi2

spi1

Clone this wiki locally