2017-03-05 48 views
0

我想在3D中生成随机形状。我希望这些形状是斑点,基本上可以通过拍摄一个球体并将其变形为不太规整的形状而获得,但仍然大部分是紧凑的。想想拿一个粘土球,捏或推,拉一点点。表面曲率或表面的不规则性的比例应该可以使用某种参数来控制。我希望输出是一个由体素组成的体积(内部为1,外部为0),尽管可以转换为体积的表面也是可以的。如何生成随机斑点?

我已经看了高斯随机领域,这是球形谐波的叠加。我无法弄清楚这些数学问题,也没有任何示例代码。而且,它们不能产生任何具有悬垂的形状(即,来自球体中心的射线不止一次地与该表面相交)。

回答

1

使用3D metaballs

随机生成三维的点的集合。 5或更少应该工作,但你可以改变这一点。

对于每个体素,计算反距离(或体素和点坐标的一些其它函数),以每个点和它们求和。如果总和等于或大于阈值,则它位于斑点中,如果它小于它,那么它在外面。

可以改变阈值,并且任选地给每个点不同的随机量(其可以是负值)。粗略地说,你希望每个点的阈值距离重叠,否则你只会有一堆单独的球体。

1

我用libnoise ... http://libnoise.sourceforge.net/

这deisgned产生培林/单面或其他类型的通用噪音库“seudo随机”的数据。

“seudo”意味着它是播种的,因此我们可以通过在我们存在时提供相同的种子值来重新计算完全相同的数据,例如虚拟世界中的程序生成纹理。

它可以很容易地被配置为生成你想要的那种东西。