是否有可能使用three.js获得索引透明度等内容?

时间:2017-02-23 12:32:33

标签: three.js transparency

我正在努力解决常见的透明度排序问题。我知道有很多方法(比如手动排序对象或与顺序无关的透明度),但所有这些都可能变得非常繁琐。如果有办法让部分不透明的物体和部分100%透明并使它们正确相交,我会好的。

理论上说这应该是可能的。不透明像素将以标准方式渲染到颜色缓冲区和z缓冲区,而透明像素则被省略。

我正在寻找的是索引透明度,因为它与gif文件一起使用,例如,不会渲染颜色为#FF00FF的对象的所有像素。

我只是不知道是否以及如何使用three.js。此外,我希望能够将它与自定义着色器一起使用。

编辑:感谢您的评论到目前为止,对此感到抱歉。这比我的代码中的特定问题更具概念性。只是我经常遇到这样的问题:透明物体的一部分切掉了应该在它们前面的其他透明物体的部分。此外,透明对象不能正确交叉,它总是覆盖另一个。我理解为什么会发生这种情况,这是一个问题,这是透明度处理方式所固有的。但是我经常只需要一个完全透明的物体部分,而不需要部分透光的透明度。如果有办法忽略对象的某些像素并将其余像正常的不透明对象渲染,那么这是可能的。

假设我想要一个金属链,每个段都是一个PlaneGeometry,其纹理显示O的形状(其余部分是透明的)。现在,链条应该以正确的链接显示,以便说明。

欢迎任何帮助!

干杯!

1 个答案:

答案 0 :(得分:0)

如果要渲染一个three.js场景,并且纹理贴图不包含部分透明像素 - 也就是说,每个像素都是100%不透明或100%透明,那么您可以通过设置<来实现正确的渲染/ p>

material.alphaTest = 0.5;
//material.transparent = true; // likely not needed

如果您使用的是二进制alpha-map,情况也是如此。

如果您正在编写自定义着色器,则可以通过在片段着色器中使用如下图案来实现相同的效果:

if ( texelColor.a < 0.5 ) discard;

three.js r.84