Processing 动态海报 噪点效果和波浪效果鼠标交互结合的代码
时间: 2024-03-11 18:46:51 浏览: 139
html5实现的跟随鼠标3D波浪粒子特效源码.zip
以下是一个使用 Processing 编写的动态海报,其中包含噪点效果和波浪效果,同时结合了鼠标交互。你可以将下面的代码复制到 Processing 编辑器中进行运行。
```java
float xoff = 0.0;
float yoff = 0.0;
float zoff = 0.0;
float inc = 0.1;
float scl = 20;
float cols, rows;
float[][] z;
void setup() {
size(800, 600, P3D);
cols = width / scl;
rows = height / scl;
z = new float[int(cols)][int(rows)];
}
void draw() {
background(0);
xoff = 0.0;
for (int i = 0; i < cols; i++) {
yoff = 0.0;
for (int j = 0; j < rows; j++) {
z[i][j] = map(noise(xoff, yoff, zoff), 0, 1, -100, 100);
yoff += inc;
}
xoff += inc;
}
zoff += 0.01;
stroke(255);
noFill();
translate(width/2, height/2, 0);
rotateX(PI/3);
translate(-width/2, -height/2, 0);
for (int i = 0; i < cols-1; i++) {
beginShape(TRIANGLE_STRIP);
for (int j = 0; j < rows; j++) {
vertex(i*scl, j*scl, z[i][j]);
vertex((i+1)*scl, j*scl, z[i+1][j]);
}
endShape();
}
float mx = mouseX - width/2;
float my = mouseY - height/2;
translate(width/2, height/2, 0);
rotateX(-PI/3);
translate(-width/2, -height/2, 0);
float m = map(dist(mx, my, 0, 0), 0, 500, 0.1, 1);
float a = atan2(my, mx);
float dx = m * cos(a);
float dy = m * sin(a);
for (int i = 0; i < cols-1; i++) {
beginShape(TRIANGLE_STRIP);
for (int j = 0; j < rows; j++) {
curveVertex(i*scl + dx, j*scl + dy, z[i][j]);
curveVertex((i+1)*scl + dx, j*scl + dy, z[i+1][j]);
}
endShape();
}
}
```
代码解释:
- `xoff`、`yoff`、`zoff` 分别用于控制噪点的变化,`inc` 为每次增加的步长,`scl` 为每个网格的大小。
- 在 `setup()` 函数中创建了一个二维数组 `z`,用于存储每个网格的高度值。
- 在 `draw()` 函数中,使用噪声函数 `noise()` 生成每个网格的高度值,并将其存储在 `z` 数组中。
- 使用 `rotateX()` 和 `translate()` 函数将图形旋转和移动到适当的位置。
- 使用 `beginShape()`、`vertex()` 和 `endShape()` 函数绘制每个网格,使其呈现波浪效果。
- 计算鼠标位置和距离,然后使用 `curveVertex()` 函数将每个网格的顶点连接起来,使其呈现鼠标交互的效果。
希望这个代码能够帮助到你!
阅读全文