three.js-如何动态更改对象的不透明度?

问题描述 投票:37回答:3

这是我的对象:

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;

现在的问题是如何改变纹理的不透明度?

谢谢:-)

javascript 3d three.js
3个回答
59
投票

[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

11
投票
// enable transparency
object.material.transparent = true;
// set opacity to 50%
object.material.opacity = 0.5; 

9
投票

我知道这个问题很旧,但是我想从使用过的内容中给出答案,以防有人需要。通过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});

我希望这对某人有帮助。补间真的很棒!

© www.soinside.com 2019 - 2024. All rights reserved.