【发布时间】:2015-11-12 21:29:21
【问题描述】:
我使用 CoherentNoise 库在 Unity 中创建了程序地形。生成本身工作得很好,添加到场景中的每个地形对象都会正确生成高度图并应用它们。问题是我生成的噪声在地形对象之间不是连续的,如下图所示。
下面列出了为每个地形对象生成噪声的函数
public void GenerateHeightMap() {
for (int z = 0; z < zRes; z++) {
for (int x = 0; x < xRes; x++) {
var xCoord = (float)((size.x * position.x) + x) / (xRes - 1);
var zCoord = (float)((size.z * position.z) + z) / (zRes - 1);
var value = settings.GetModule().GetValue(xCoord, zCoord, 0);
heights[x, z] = (float)(value / 2f) + 0.5f;
}
}
}
快速解释xCoord和zCoord:
首先这些 x 和 z 坐标找到它们的起始生成位置(大小 * 位置)。然后他们添加循环偏移(x 或 z)并除以地形的分辨率。理论上,这应该允许噪声生成器抓取相邻地形对象的 x、z 坐标并返回对齐的高度图。
关于为什么这些地形游戏对象不排列的任何想法?
如果有人想看一下整个项目,我已将项目上传到Github,在那里可以查看和下载。
【问题讨论】:
-
其实你确定你没有遇到纹理坐标系的问题吗?
-
我不相信,CoherentNoise 库在使用 GetValue 函数时确实使用了纹理坐标空间,但是.. 我确保在 GetValue 函数中将 Unity 的坐标空间输入到正确的参数中.
标签: c# unity3d procedural-generation