整个对象上的 Three.js alpha

Posted

技术标签:

【中文标题】整个对象上的 Three.js alpha【英文标题】:Three.js alpha on entire object 【发布时间】:2015-10-26 04:25:50 【问题描述】:

我正在创建包含多个 Collada 对象的 Three.js 场景。我希望能够在 Three.js 中设置每个 Collada 对象的不透明度(以便对象可以根据需要融入和退出场景)。

我可以设置对象内各个材质的不透明度,但这会产生相当奇怪和不受欢迎的效果:

loader.options.convertUpAxis = true;
loader.load(src, function(collada) 
    collada.scene.traverse(function (child) 
        if( child.material ) 
            child.material.opacity = 0.5;
            child.material.transparent = true;
        
(etc.)

我正在寻找的是能够在整个 collada 对象上设置不透明度(实际上是渲染它,然后设置不透明度),如所附屏幕截图的底部所示。

我通过在包含 Three.js 场景的画布上设置不透明度来实现屏幕截图底部显示的内容,但是当有多个 collada 对象时,这变得不切实际,因为它需要单独的场景/画布每个新对象。

【问题讨论】:

见***.com/questions/36947704/… 【参考方案1】:

实际上,听起来您所要求的是对象最终渲染图像的不透明度,在背景之上(毕竟,您没有通过引擎看到机身 - 那些是不透明的彼此)。

为此,最好的方法可能是使用三个 EffectComposer 并为 BG 和 FG 元素渲染目标。然后这些图像可以很容易地混合。查看三个渲染到纹理示例。

另一种选择是在飞机上使用 BG 纹理并以不同的透明度渲染它,但要对其进行排序可能比它的价值更麻烦。最简单的方法是将不透明的飞机渲染到渲染目标,然后将天空绘制到常规帧缓冲区,然后在其上合成飞机。只有一个画布,如果您需要以不同的透明度渲染多个项目,您可以重新使用该渲染目标来构建图像。

【讨论】:

以上是关于整个对象上的 Three.js alpha的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 在通过 OBJMTLLoader 加载的对象上的多种材质

循环中的对象不会在Three.js的整个lopop上投射阴影

three.js_sence(场景)

Three.js 示例不完全兼容移动端

使用Three.js里的各种光源

在web端,three.js如何操作3d模型obj对象的子构件