处理动画非常紧张
Processing animation very jittery
我只是在修补 Processing 以便按程序制作一些 .gif
动画。出于某种原因,当我 运行 时(以及当我使用 GifAnimation 导出它时),我刚完成的那个有很多抖动。我不完全确定为什么会这样。
请原谅我的代码是黑客工作:
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;
}
}
结果如下:
是我做错了什么,还是仅仅是处理环境的限制?
编辑:
将渲染模式更改为 P3D (size(120, 120, P3D);
) 后,一切都变得更加流畅。它摆脱了圆形边缘,我不得不添加一些抗锯齿 (smooth(8)
),但它不再抖动。透明背景也是一个好处:
如果你post你的问题的最简单形式,你会更幸运,像这样:
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));
}
这使我们能够排除原因并更容易找到解决方案。
此外,我用谷歌搜索了 "processing arc jittery" 和 "processing arc wobble" 并找到了 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));
}
在 setup()
函数的最后一行添加 hint(ENABLE_STROKE_PURE);
似乎也可以解决您的问题。
我只是在修补 Processing 以便按程序制作一些 .gif
动画。出于某种原因,当我 运行 时(以及当我使用 GifAnimation 导出它时),我刚完成的那个有很多抖动。我不完全确定为什么会这样。
请原谅我的代码是黑客工作:
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;
}
}
结果如下:
是我做错了什么,还是仅仅是处理环境的限制?
编辑:
将渲染模式更改为 P3D (size(120, 120, P3D);
) 后,一切都变得更加流畅。它摆脱了圆形边缘,我不得不添加一些抗锯齿 (smooth(8)
),但它不再抖动。透明背景也是一个好处:
如果你post你的问题的最简单形式,你会更幸运,像这样:
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));
}
这使我们能够排除原因并更容易找到解决方案。
此外,我用谷歌搜索了 "processing arc jittery" 和 "processing arc wobble" 并找到了 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));
}
在 setup()
函数的最后一行添加 hint(ENABLE_STROKE_PURE);
似乎也可以解决您的问题。