6

特定の色のthree.jsオブジェクトがあります。別の色にスムーズにアニメートしたいです。アニメーション中は、開始と終了の間に直接グラデーションのみが表示されます。つまり、RGB色空間で線形にトゥイーンを実行するべきではありません。HSV空間内の線形トゥイーンも見栄えがよいかどうかさえわかりません。

three.jsオブジェクトでこの種のカラートゥイーンを取得するにはどうすればよいですか?

4

1 に答える 1

5

HSV空間でトゥイーンを作成するバージョンがあります。途中でさまざまな色相が現れる可能性があるため、完璧ではありません。

Three.jsには、からHSV値を取得するためのメソッドは含まれていませんTHREE.Color。したがって、1つ追加します。

THREE.Color.prototype.getHSV = function()
{
    var rr, gg, bb,
        h, s,
        r = this.r,
        g = this.g,
        b = this.b,
        v = Math.max(r, g, b),
        diff = v - Math.min(r, g, b),
        diffc = function(c)
        {
            return (v - c) / 6 / diff + 1 / 2;
        };

    if (diff == 0) {
        h = s = 0;
    } else {
        s = diff / v;
        rr = diffc(r);
        gg = diffc(g);
        bb = diffc(b);

        if (r === v) {
            h = bb - gg;
        } else if (g === v) {
            h = (1 / 3) + rr - bb;
        } else if (b === v) {
            h = (2 / 3) + gg - rr;
        }
        if (h < 0) {
            h += 1;
        } else if (h > 1) {
            h -= 1;
        }
    }
    return {
        h: h,
        s: s,
        v: v
    };
};

次に、トゥイーンは比較的簡単です。

new TWEEN.Tween(mesh.material.color.getHSV())
    .to({h: h, s: s, v: v}, 200)
    .easing(TWEEN.Easing.Quartic.In)
    .onUpdate(
        function()
        {
            mesh.material.color.setHSV(this.h, this.s, this.v);
        }
    )
    .start();

より知覚的に自然な移行について聞いてみたいと思います。

于 2012-09-20T01:14:21.280 に答える