8

基本上,

这有效:

var expl1 = new THREE.ImageUtils.loadTexture( 'images/explodes/expl1.png' );
this.material = new THREE.MeshBasicMaterial({ map: expl1, transparent:true, blending:THREE.AdditiveBlending });

而这并不...

var expl1 = new THREE.ImageUtils.loadTexture( 'images/explodes/expl1.png' );
this.material = new THREE.MeshBasicMaterial({ map: expl1.clone(), transparent:true, blending:THREE.AdditiveBlending });

问题是,我有多个具有这种纹理的对象。我希望能够更改其中 1 个对象的纹理偏移,而其他对象也不会更改。这就是我需要克隆的原因,但克隆的纹理似乎是空的。

var expl1 = new THREE.ImageUtils.loadTexture( 'images/explodes/expl1.png' );

这仅在全局变量中加载一次。每次创建新对象时,我都可以加载新纹理,但因为它是 700KB,所以在加载图像时会产生延迟。

4

1 回答 1

19

编辑:THREE.ImageUtils.loadTexture()已被loader = new THREE.TextureLoader(); loader.load().


这可能是因为为您new THREE.TextureLoader().load()设置了needsUpdate标志,而克隆则没有。

这样做,而不是

var texture2 = texture1.clone();
texture2.needsUpdate = true;
material = new THREE.MeshBasicMaterial( { map: texture2, ... } );

三.js r.75

于 2013-05-23T06:46:43.493 回答