gpt4 book ai didi

javascript - 如何使用 Three.js 改变立方体的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:25 31 4
gpt4 key购买 nike

我想根据单选按钮选择更改立方体的颜色。如何通过平稳过渡实现这一目标?

单选按钮

<input id="black" type="radio" data-color="black" name="color" value="" checked="checked">
<input id="white" type="radio" data-color="white" name="color" value="">
<input id="blue" type="radio" data-color="chamois" name="color" value="">

Material

var color = {

"black": new THREE.MeshPhongMaterial({
color: 0x222222
}),
"white": new THREE.MeshPhongMaterial({
color: 0xffffff
}),
"chamois": new THREE.MeshPhongMaterial({
color: 0xEDE6D4
})

}

几何

var geometry= new THREE.BoxGeometry(2,2,2);
var mesh = new THREE.Mesh(geometry, color [ "black" ]);
scene.add(mesh );

最佳答案

幸运的是,我不久前实现了一个解决方案 - 只要您不介意使用补间库(我使用 GSAP),这段代码就可以很好地工作。

这里只是颜色补间代码(为简洁起见):

function colorTo (target, value){
var target = scene.getObjectByName(target);
var initial = new THREE.Color(target.material.color.getHex());
var value = new THREE.Color(value.color.getHex());

TweenLite.to(initial, 1, { //This syntax is relevant to GSAP's TweenLite, I'll provide a link to the docs
r: value.r,
g: value.g,
b: value.b,
ease: Cubic.easeInOut,
onUpdate: function() { target.material.color = initial; }
});
}

Link to full code in fiddle

记住, fiddle 之所以起作用是因为我链接到两个外部库:

  1. three.min.js
  2. TweenMax.min.js

如果您有任何问题,请给我留言,我一定会回答的!

Link to the GSAP TweenLite docs


编辑

我已经更新了答案以包含使用单选按钮触发补间的功能。重要的是,当您创建网格时,您实例化一个 new THREE.Material() 而不是 引用color 数组中已有的 Material 。像这样:

var mesh = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({ color: 0x222222})); 

然后将其链接到 radio 控件就完全没有问题了:

$("#inputs input").change(function(event){
if ($(this).prop("checked")) {
var targetColor = $(this).data("color");
colorTo("box", color[targetColor]);
}
});

编辑 2

在前面的示例中,我使用了一个超轻量级补间插件 ( < 340 B ),不幸的是(我不知道)它正在等待退休。从那以后,我更新了示例以使用一个稍微更通用、因此更重的名为 GSAP 的库 - 尽管如此,它仍然是一个令人难以置信的能力和闪电般快速的库,所以我会毫不犹豫地使用它。

最后一次(希望如此),编码愉快!

关于javascript - 如何使用 Three.js 改变立方体的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252225/

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