2

XNAでノイズを生成するためのライブラリを見てきました。Libnoise は、最も論理的な選択のように思えました。ライブラリは非常に使いやすく、素晴らしい結果をもたらします。ただし、追加のセクションを生成するのに問題があります。C++ のドキュメントには、このための非常に優れた機能があります。

  utils::NoiseMap heightMap;
  utils::NoiseMapBuilderPlane heightMapBuilder;
  heightMapBuilder.SetSourceModule (myModule);
  heightMapBuilder.SetDestNoiseMap (heightMap);
  heightMapBuilder.SetDestSize (256, 256);
  heightMapBuilder.SetBounds (6.0, 10.0, 1.0, 5.0); //this one!
  heightMapBuilder.Build ();
//http://libnoise.sourceforge.net/tutorials/tutorial3.html

XNA バージョンはこのようには機能せず、代わりに変換関数を使用して、生成された高さマップを "移動" します。

Translate.cs

/// <summary>
    /// Initializes a new instance of Translate.
    /// </summary>
    /// <param name="x">The translation on the x-axis.</param>
    /// <param name="y">The translation on the y-axis.</param>
    /// <param name="z">The translation on the z-axis.</param>
    /// <param name="input">The input module.</param>
    public Translate(double x, double y, double z, ModuleBase input)
        : base(1)
    {
        this.m_modules[0] = input;
        this.X = x;
        this.Y = y;
        this.Z = z;
    }

使用法

        perlin = new Perlin(zoom, 4, 0.2, 4, 1, QualityMode.Medium);
        Translate translate = new Translate(location.X, location.Y, 0, perlin);
        this.m_noiseMap = new Noise2D(200, 200, translate);
        this.m_noiseMap.GeneratePlanar(-1 * zoom, 1 * zoom, -1 * zoom, 1 * zoom, true);

ここで問題が発生します。ハイトマップは変換されますが、歪みも生じます。パーリンは変更されていないため、これは奇妙に思えます。Z を変更すると高さマップが変更されると想像できましたが、変更しているのは X 軸だけです。

ここに画像の説明を入力

これについて何か考えはありますか?

4

3 に答える 3

1

主な問題は、ハイトマップが結果を生成するために使用しているディメンションのようです。

そのため、特にプロジェクションを適用した後、高さマップビルダーが標高として使用している次元については非常にあいまいです...

X が標高を制御しているように思えます (海を見ると、文字通り海面を上げているように見えます)。これはあまり意味がないかもしれませんが、ソースをチェックして、実際に使用されているディメンションを確認することをお勧めします。このような 3D ノイズは、アプリケーションと一貫性を持たせている限り、通常、どの次元がどれであるかを気にしません。

于 2012-04-06T21:21:36.830 に答える
0

私はこれが古いスレッドであることを知っており、翻訳が何であるかはわかりませんが、異なるタイルを生成するために必要ではないと思います.

GeneratePlanar() 関数を使用して、タイルを X 単位と Y 単位でオフセットし、ズームに対して相対的にするだけです。したがって、0.5 でズームしている場合は、隣接するタイルのオフセットを 0.5 の係数で移動します。

public void GeneratePlanar(double left, double right, double top, double bottom, bool seamless)

        // Initialize the noise map
        this.m_noiseMap = new Noise2D(resolution, resolution, moduleBase);
        this.m_noiseMap.GeneratePlanar(
        offsetX + 0 * 1/zoom, 
        offsetX + 1 * 1/zoom, 
        offsetY + 0 * 1/zoom,
        offsetY + 1 * 1/zoom);
于 2013-02-04T20:06:45.637 に答える