处理动画非常紧张

时间:2015-06-02 00:00:55

标签: animation processing procedural-generation

我只是在修补处理,以便在程序上制作一些long lastTime = 0; float angle1, angle2, angle3, angle4, angle5, angle6; int change; public void setup() { size(120, 120); lastTime = millis(); angle1 = -60; angle2 = 240; angle3 = -30; angle4 = 210; angle5 = -75; angle6 = 255; change = 3; noFill(); stroke(0); strokeWeight(10); smooth(); } public void draw() { if (millis() - lastTime > 12) { background(255,255,255); lastTime = millis(); stroke(#3aa8c3); arc(60, 60, 70, 70, radians(angle1), radians(angle2)); ellipse(60, 60, 10, 10); stroke(#e7e7e7); arc(60, 60, 40, 40, radians(angle3), radians(angle4)); arc(60, 60, 100, 100, radians(angle5), radians(angle6)); angle1-=change*2; angle2-=change*2; angle3+=change*3; angle4+=change*3; angle5+=change; angle6+=change; } } 动画。出于某种原因,我刚刚完成制作的那个在运行它时会产生很多抖动(当我使用GifAnimation导出时也是如此)。我不完全确定为什么会这样。

请原谅我的代码中的黑客工作:

size(120, 120, P3D);

结果如下: jittery gif

这是我做错了什么,还是只是对处理环境的限制?

编辑: 将渲染模式更改为P3D(smooth(8))后,事情变得更加顺利。它摆脱了圆形边缘,我不得不添加一些抗锯齿({{1}}),但它不再抖动。透明背景也是一个奖励: enter image description here

1 个答案:

答案 0 :(得分:1)

如果你发布最简单的问题形式,你会有更好的运气,如下所示:

public void setup() {
  size(360, 360);
  noFill();
  stroke(0);
  smooth(10);
}
public void draw() {
  background(255);
  stroke(#3aa8c3);
  arc(60, 60, 70, 70, radians(mouseX), radians(mouseY));
}

这使我们能够消除原因并更容易找到解决方案。

另外,我用谷歌搜索“处理弧形抖动”和“处理弧形摆动”并找到this回答,其中说试用hint(ENABLE_STROKE_PURE)函数。当我将它添加到示例中时,它似乎工作得更好:

public void setup() {
  size(360, 360);
  noFill();
  stroke(0);
  smooth(10);
  hint(ENABLE_STROKE_PURE);
}
public void draw() {
  background(255);
  stroke(#3aa8c3);
  arc(60, 60, 70, 70, radians(mouseX), radians(mouseY));
}

添加hint(ENABLE_STROKE_PURE);作为setup()功能的最后一行似乎也解决了您的问题。