坐标舍入会导致处理中的动画不稳定

时间:2016-10-18 12:33:55

标签: animation 2d processing

考虑以下草图:

float offset = 0.0;

void setup() {
    size(500, 500);
    smooth(8);
}

void draw() {
    stroke(0);
    background(255);
    strokeWeight(2);
    translate(offset, 0);
    for (int i = 0; i < 10; i++) {
        line(i * 20, 100, i * 30, 400);
    }
    offset += 0.1;
}

如果你运行它,你会发现线条以一种生涩的方式移动,并且不像人们希望的那样顺利。我猜这可能是由于处理舍入坐标。有没有人遇到并解决过这些问题?我有什么可以做的吗?

基本上:如何在保持动画速度的同时让这个动画保持平滑?

1 个答案:

答案 0 :(得分:0)

处理并非真正“四舍五入”任何事情。问题在于没有半像素这样的东西。

以这种方式思考:你开始时X值为30.0,即30像素。然后将其增加到30.1,仍然是像素30.然后30.2仍然是像素30.这一直持续到你最终增加到31.0,即31像素。

换句话说,你在每个像素上花费了10帧。这就是你的动画看起来不平稳的原因:线在一个坐标上花费10帧,然后移动,然后在坐标上花费10帧等。

如果将偏移增量增加到.5,那么您在每个像素上花费的时间就会减少,动画也会更加顺畅。

之前:

before

后:

after

编辑:默认渲染器的情况如下。 P3D渲染器在子像素渲染方面似乎更好:

p3d

您也可以尝试使用P2D渲染器,它在子像素渲染方面似乎也优于默认渲染器。