【问题标题】:Problems to tween the transparency of threejs plane and css3d objects补间threejs平面和css3d对象透明度的问题
【发布时间】:2015-09-23 22:40:37
【问题描述】:

我创建如下所示的对象:

var element = document.createElement( 'div' );
element.innerHTML = '<i class="fa fa-exclamation-triangle fa-5x"></i>';
object = new THREE.CSS3DObject( element );
object.position.set(11,4,8)
object.name = "error"
object.transparent = true;
object.scale.set(0.01,0.01,0.01)

SceneService.sceneCss.add(object);

var material = new THREE.MeshBasicMaterial({
   color: 0xFF0101,
   side: THREE.DoubleSide
});

var geometry = new THREE.PlaneGeometry(100, 100);
var mesh = new THREE.Mesh(geometry, material);
mesh.position.copy(object.position);
mesh.rotation.copy(object.rotation);
mesh.scale.copy(object.scale);
mesh.transparent = true;
mesh.name = "error_plane"
SceneService.scene.add(mesh);

我已经设置了透明属性。我试图隐藏“错误平面”

object = SceneService.scene.getObjectByName('error_plane');
tweens.push(tl.to(object.material, 5, {opacity: 0}, 0));

但它不起作用。 css3d 对象没有任何材质。有什么想法可以补间不透明度吗?

【问题讨论】:

  • 你能准备一个简单的小提琴来演示这个问题吗?

标签: three.js gsap


【解决方案1】:

您可以使用如下模式补间 CSS3DObject 的不透明度:

var current = {
    opacity: 1
};

new TWEEN.Tween( current )
    .to( { opacity: 0 }, 2000 )
    .onUpdate( function () {
        object.element.style.opacity = current.opacity;
    } )
    .start();

然后,在动画循环中,调用

TWEEN.update();

您可以使用以下模式对Mesh 对象的不透明度进行补间:

var current = {
    opacity: 1
};

new TWEEN.Tween( current )
    .to( { opacity: 0 }, 2000 )
    .onUpdate( function () {
        object.material.opacity = current.opacity;
    } )
    .start();
}

您必须设置object.material.transparent = true; 才能使第二种模式起作用。您还必须在动画循环中调用TWEEN.update();

three.js r.72

【讨论】:

  • tweens.push(tl.to(object.element, 5, {opacity: 0}, 5));这适用于 css3D 对象。现在我只需要飞机的解决方案
  • 更新了答案。确保在您的演示中设置mesh.material.transparent = true
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2011-04-11
相关资源
最近更新 更多