【发布时间】:2016-03-10 05:16:14
【问题描述】:
我正在使用 libnoise 的 C# 端口和 XNA(我知道它已经死了)来生成行星。
libnoise 中有一个function,它接收球面中顶点的坐标(纬度和经度)并返回一个随机值(从-1 到1)。
因此,使用该值,我可以更改球体表面上每个顶点的高度(高度),创建一些高程,模拟行星表面(我不是简单地在球体周围包裹纹理,我实际上是从头开始创建每个顶点)。
我所拥有的一个例子:
现在我想为球体设置动画,like this
但问题是,libnoise 仅适用于 3D 噪声。 “行星”函数将纬度和经度映射到立方体的 XYZ 坐标。
而且我相信,要像我想要的那样为球体设置动画,我需要一个额外的坐标,作为“时间”维度。我对吗?或者是否可以使用 libnoise 提供的功能来做到这一点?
OBS:正如我所提到的,我使用的是 UV 球体,而不是 icosphere 或球形立方体。
编辑:这是 libnoise 用于将 lat/long 映射到 XYZ 的算法:
public double GetValue(double latitude, double longitude) {
double x=0, y=0, z=0;
double PI = 3.1415926535897932385;
double DEG_TO_RAD = PI / 180.0;
double r = System.Math.Cos(DEG_TO_RAD * lat);
x = r * System.Math.Cos(DEG_TO_RAD * lon);
y = System.Math.Sin(DEG_TO_RAD * lat);
z = r * System.Math.Sin(DEG_TO_RAD * lon);
return GetNoiseValueAt(x, y, z);
}
【问题讨论】:
-
澄清一下:您只需要随时间变化的高度图,还是需要仅用高度图无法描述的带有拱门、洞穴等的地形?
-
此时,只是随时间变化的高度图。只要 x/y 映射到 lat/long。
标签: c# perlin-noise procedural-generation