HSV alanında bir ara doldurmayı yapan bir sürümüm var. Mükemmel değil, yol boyunca farklı tonlar ortaya çıkabilir.
Three.js, THREE.Color
'dan HSV değerlerini almak için bir yöntem içermez. Yani, bir tane ekleyin:
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
};
};
Sonra aranın oldukça basittir:
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();
Ben daha algısal doğal geçiş duymak ilgi duyarım.
Bunun yerine, ancak bunun yerine rgb ile ilgili? Yeni TWEEN.Tween (mesh.material.color) .to ({r: 1, g: 0, b: 0}, 200) .start() ' – mrdoob
@mrdoob, geçmişte yaptığım deneyler, RGB alanı içinde lineer karıştırma çirkin ara renkler elde etmek için. Yine de bunu deneyeceğim. Şimdilik, yukarıda oldukça iyi çalışıyor gibi görünüyor. –
Ah. Seni yanlış anladım. Evet. Yaklaşımın iyi gibi geliyor. – mrdoob