我正在尝试一次写出大量的物体,我希望颜色会褪色。但是,在使用.toString(16)
创建字符串后,它不会在代码中读取new THREE.MeshBasicMaterial({ color: '0x' + color, wireframe: false, opacity: 0.5 });
以下是目前的代码:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
for (var k = 0; k < 10; k++) {
geometry = new THREE.CubeGeometry(50, 50, 50);
colorr = 254 / 10 * k;
colorr = Math.round(colorr);
colorr = colorr.toString(16);
colorg = 254 / 10 * k;
colorg = Math.round(colorg);
colorg = colorg.toString(16);
colorb = 254 / 10 * k;
colorb = Math.round(colorb);
colorb = colorb.toString(16);
color = '0x' + colorr + colorg + colorb;
material[i] = new THREE.MeshBasicMaterial({ color: color, wireframe: false, opacity: 0.5 });
mesh[i] = new THREE.Mesh(geometry, material[i]);
mesh[i].position.x = -500 + (k * 100);
mesh[i].position.y = -500 + (j * 100);
mesh[i].position.z = -500 + (i * 100);
scene.add(mesh[i]);
objects.push(mesh[i]);
}
}
}
但是,它只会产生灰黑色。
答案 0 :(得分:4)
> 0xe5e5e5
15066597
> parseInt('0xe5e5e5', 16)
15066597
长话短说,“0x”只是一种以十六进制编写数字的便捷方式,因此它们看起来像CSS颜色,但JavaScript将这样写入的数字视为普通(十进制)数字,Three.js也是如此。给定相应的基数,parseInt()
函数将正确地将字符串从十六进制转换为十进制,因此您可以将颜色构造为十六进制字符串并将其转换为数字。
答案 1 :(得分:2)
将组件从0
转换为1
并使用...
var color = new THREE.Color().setRGB(r, g, b);