perlin噪声场如何工作?

时间:2011-04-22 16:26:32

标签: processing perlin-noise

我特别关注这个例子:

http://www.airtightinteractive.com/demos/processing_js/noisefield08.html

以下是代码:

http://www.airtightinteractive.com/demos/processing_js/noisefield08.pjs

我想我需要解释这些线在粒子类中的作用:

d=(noise(id,x/mouseY,y/mouseY)-0.5)*mouseX;  
x+=cos(radians(d))*s;
y+=sin(radians(d))*s;

我知道噪音会根据给定的坐标计算出一个值,但是我没有得到用鼠标Y分割粒子的x pos或用鼠标y分割y pos的逻辑。我也不明白'id'是什么,这似乎是一个反驳的代表,或接下来的两行完成的内容。

由于

2 个答案:

答案 0 :(得分:2)

  

移动鼠标以更改粒子运动。

似乎是运动的方向。通过将mouseY和mouseX放入d的计算中,它允许底层字段依赖于鼠标位置。如果没有更好地理解函数本身,我无法准确地告诉你mouseY和mouseX对该字段有什么影响。

通过运行cos(弧度(d))和sin(弧度(d)),代码将角度(d)转换为单位矢量。例如,如果d是1弧度,则cos(弧度(d))将为-1,sin(弧度(d))将为0,因此它将角度1弧度转换为单位矢量(-1,0)。 / p>

因此,似乎存在一些确定粒子移动方向的基础运动场。运动场由噪声函数表示,并且接收粒子的当前位置,粒子id(可能给每个粒子独立运动或者可能记住粒子运动的历史并且基于该历史的未来运动)和鼠标的当前位置。

粒子移动的实际距离是s,随机确定为2到7个像素。

答案 1 :(得分:2)

通过运行cos(弧度(d))和sin(弧度(d)),代码将角度(d)转换为单位矢量。例如,如果d是1弧度,则cos(弧度(d))将为-1,sin(弧度(d))将为0,因此它将角度1弧度转换为单位矢量(-1,0)。 / em>的

轻微校正:即π弧度(180度)的旋转,而不是1弧度(约57度)。