【问题标题】:Video transparency with A-Frame and Three.js使用 A-Frame 和 Three.js 实现视频透明度
【发布时间】:2020-04-19 09:33:12
【问题描述】:

我正在从 A-Frame Github 页面转发 this open issue,希望有些人可能知道这个问题是怎么回事。它仍然不适用于 A-Frame 1.0.3,我真的不知道在哪里搜索。关于 Github 问题有两个示例,一个使用 A-Frame 0.8.0,另一个使用 A-Frame 0.9.0。 javascript 控制台中绝对没有警告或信息,因此很难找到问题所在。

在 0.8.0 版上,它使用了 Three v90,在 0.9.0 版上,它使用了 v101。所以也许在这两个版本之间做了一些事情,但我不明白是什么。

有没有人找到在最新版本的 A-Frame 和/或 Three.js 上使用透明视频的方法?

感谢您的帮助:)

【问题讨论】:

  • 这不是three.js 问题,因为以下示例演示了具有透明度的 webm 视频纹理:windy-rocket.glitch.me。使用R112 测试。
  • 感谢@Mugen87 的回答!我看到你添加到 Github 问题并且有一些反应,所以也感谢 :) 我会继续调查 A-Frame 方面,因为很明显它与 Three.js 无关。谢谢!
  • 我遇到了和你一样的问题,我做了一个shader包来解决这个问题。它适用于 > 0.9.0 的版本,请查看:github.com/balataca/aframe-transparent-video-shader

标签: three.js aframe


【解决方案1】:

分配的纹理格式似乎没有alpha通道(THREE.RGBFormat,您可以记录并检查值here)。

您可以通过将视频纹理的格式更改为THREE.RGBAFormat来解决此问题:

videoTexture.format = THREE.RGBAFormat

在包含如下修复的自定义组件中:

// wait until the material is ready
this.el.addEventListener('materialtextureloaded', e => {
   // grab the material
   let material = this.el.getObject3D("mesh").material;
   // swap the format
   material.map.format = THREE.RGBAFormat;
   material.map.needsUpdate = true;
})

工作故障here

【讨论】:

  • 谢谢!我动态地将我的元素添加到场景中,因此我在创建时将事件侦听器插入其中。我只需要做 2 处细微的更改: - 我听“materialvideoloadeddata”事件,因为在他的处理过程中,我在“materialtextureloaded”事件处理程序中没有 object3D。 - 我必须测试是否设置了材料,我有没有设置的情况。无论如何它都可以工作,所以谢谢你的帮助:) 我想它会在正式版本中变得更正确!
  • @StéphaneAlbanese 很高兴我能提供帮助 - 我在我的 anwser 以及 github 问题中添加了更多细节。也完全忘记了materialvideoloadeddata 事件:)
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 2016-11-01
  • 2019-02-24
  • 2020-02-08
  • 1970-01-01
  • 2018-12-13
  • 2010-09-23
  • 2012-12-03
相关资源
最近更新 更多