如何生成不规则的球形?

时间:2010-04-09 23:47:44

标签: graphics animation random processing

什么样的算法会产生像World of Goo中那样的随机“goo ball”。我正在使用Proccesing,但任何通用算法都可以。

我想这可以归结为如何“随机”制作圆形的球,但不是完美的圆形,仍然看起来很逼真?

提前致谢!

4 个答案:

答案 0 :(得分:2)

在World of Goo中使物体变得逼真的不是它们的形状,而是物体的行为是(或多或少)逼真的2D物理模拟,尤其是

因此,尝试使对象的行为变得现实,并使它们看起来(感觉)逼真。

答案 1 :(得分:1)

不确定这是否是您正在寻找的,因为我无法从工作中查看该网站。 :)

圆圈只是ellipse的特例,其中长轴和短轴相等。压扁的球形是椭圆形,其中一个轴比另一个轴长。您可以为轴生成不同的长度并旋转椭圆以获得这些不规则的形状。

答案 2 :(得分:0)

正如Unreason所说,World of Goo并不是关于形状,而是物理模拟。

但创建球状不规则形状的简单方法可能是从圆上的n个顶点(点)V_1,V_2 ... V_n开始,并对其应用一些随机变形。有很多方法可以做到这一点,从简单地移动一些单个顶点到复杂的物理模拟。

一些想法:

1)选择随机顶点V_i,选择随机向量T,将该向量作为平移(移动)应用于V_i,将T应用于所有其他顶点V_j,但是根据与V_i的“距离”按比例缩小(其中距离可以是j和i之间的绝对差值,或V_j到V_i的实际几何距离)。对于缩放因子,您可以使用任何函数f,对于f(0)为1,对于增加距离(基本上是径向基函数)则递减。

for each V_j
   V_j = scalingFactor(distance(V_i, V_j)) * translationVector + V_j

2)你将V_i移动到1中,但是现在你模拟所有邻接顶点之间的弹簧连接,并根据拉伸弹簧产生的力迭代地移动所有顶点。

3)对于更多圆形,您可以在B样条曲线的控制点上执行1)或2)。

当你移动顶点时要小心自交叉。

只是一些粗略的想法,没有经过测试......

答案 3 :(得分:0)

也许 Metaballs wiki)是可以开始的......但我不确定。

否则我建议使用粒子方法,其中球由许多粘在一起的粒子组成,给出不规则性(请注意,这需要一个最小的物理引擎来处理保持所有的弹簧体粒子在一起)。

相关问题