我一直在寻找能够在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);
这就是问题出现的地方;虽然它确实翻译了高度图,但它也会扭曲它。这似乎很奇怪,因为perlin仍未修改。我可以想象更改Z会导致高度图发生变化,但我只是在改变X轴。
对此有什么想法吗?
答案 0 :(得分:1)
看起来主要问题是高度图用于产生结果的尺寸。
因此,高度图构建器用作高程的尺寸非常模糊,尤其是在应用投影后......
在我看来,X正在控制海拔(如果你看海洋,看起来你实际上是在升高海平面)。虽然这可能没有多大意义,但检查源并查看其实际使用的尺寸可能会很好。像这样的3D噪声一般不关心哪个尺寸,只要你使它与你的应用程序保持一致。
答案 1 :(得分:0)
我知道这是一个旧线程,我不知道翻译是什么,但我认为你不需要它来生成不同的瓷砖。
只需使用GeneratePlanar()函数将贴片按X和Y单位偏移,并使其相对于缩放,因此如果缩放0.5,则将相对贴片的偏移量移动0.5倍
public void GeneratePlanar(双左,双右,双顶,双底,bool无缝)
// 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);
答案 2 :(得分:0)
我不知道libnoise xna,但普通的libnoise使用X和Z作为2d高度图。所以你应该翻译X和Z而不是X和Y.