three.js中的clone()方法如何让我所有的网格属性都改变?

3
我想创建100个简单立方体的副本,并逐渐降低每个立方体的不透明度。以下是我拥有的循环代码:
var geometry = new THREE.BoxGeometry(0.15,0.15,0.15);
var material = new THREE.MeshNormalMaterial();
var cube = new THREE.Mesh( geometry, material );
cube.material.transparent = true;
scene.add( cube );

for(let i = 0; i < 100; i++){
    window['cube'+i] = cube.clone();
    window['cube'+i].position.x = i;

    window['cube'+i].material.opacity = 1 - (0.01*i);
    scene.add(window['cube'+i]);
}

很不幸,所有我的网格都以最后一次设置的不透明度结束。

我不明白为什么所有的网格在x位置正常增加时都具有相同的不透明度。

有没有人有分离每个不透明度属性的想法?谢谢


可能是因为您在使用同样的材料。请为每个项目使用单独的材料。 - Madhawa Priyashantha
非常感谢,那确实是原因 :) - Michaël
1个回答

2

出于性能方面的考虑,克隆网格时默认情况下不会克隆其几何和材质。如果您想控制每个网格的不透明度,最好为每个实例克隆材质。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接