这是我的对象:
var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { map: THREE.ImageUtils.loadTexture( "image.png" ) } ) );
object.position.set(2, 3, 1.5);
现在,我已经在init()中创建了该对象;功能,我可以直接转到对象并更改其位置,如下所示:
object.position.x = 15;
现在的问题是如何改变纹理的不透明度?
谢谢:-)
[THREE.MeshLambertMaterial
扩展了THREE.Material
,这意味着它继承了opacity
属性,因此您所需要做的就是访问对象上的材质,并更改材质的不透明度:
object.materials[0].opacity = 1 + Math.sin(new Date().getTime() * .0025);//or any other value you like
还请注意,材质必须将其transparent
属性设置为true。
object.materials[0].transparent = true;
((感谢德鲁和杜伊斯指出)
更新
该属性现在只是material
:
material
// enable transparency
object.material.transparent = true;
// set opacity to 50%
object.material.opacity = 0.5;
我知道这个问题很旧,但是我想从使用过的内容中给出答案,以防有人需要。通过three.js,我在Greensock的TweenMax / TweenLite中进行了补间。这样,我就可以补间任何对象的任何属性,并且可以流畅地运行。签出库var map = THREE.ImageUtils.loadTexture( myJSONObject[i].url );
var material = new THREE.MeshLambertMaterial( { map: map, transparent: true } );
var object = new THREE.Mesh( geometry, material );
material.opacity = 0.6;
。我需要的所有补间属性是:
here
其中持续时间以秒为单位,属性位于对象中。这样做的“陷阱”,尤其是在使用three.js时,是要确保您对object参数有所了解。例如,对于这个问题,如果您要更改网格的不透明度,则无法执行
TweenLite.to(object, duration, properties);
相反,您需要更具体地写
TweenLite.to(mesh, 2, {material.opacity: 0});
我希望这对某人有帮助。补间真的很棒!