gpt4 book ai didi

javascript - 如何使用 three.js 在两种颜色之间进行补间?

转载 作者:数据小太阳 更新时间:2023-10-29 05:23:34 25 4
gpt4 key购买 nike

我有一个给定颜色的 three.js 对象。我想把它平滑地动画成另一种颜色。在动画期间,它应该只显示开始和结束之间的直接渐变。也就是说,它不应该在 RGB 颜色空间中线性执行补间。我什至不确定 HSV 空间内的线性补间是否也好看。

如何在 three.js 对象上获得这种颜色补间?

最佳答案

我有一个在 HSV 空间中制作补间的版本。它并不完美,因为沿途会出现许多不同的色调。

Three.js 不包含从 THREE.Color 获取 HSV 值的方法。所以,添加一个:

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();

我很想知道感知上更自然的过渡。

关于javascript - 如何使用 three.js 在两种颜色之间进行补间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com